VBS/EBCDICファイルをシフトJISに変換する
//VBS/EBCDICファイルをシフトJISに変換する
VBSによる変換
Microsoftのサイトに、VBAを使った変換用プログラムがありました。
それを利用して、VBSで変換ツールを自作しました。
使い方
後述のプログラムを「ConvToSjis.vbs」という名前で保存してください。
以下の方法で実行すると変換ファイルが作成されます。
ConvToSjis.vbs 変換するファイル名 変換後のファイル名
このプログラムは「富士通」準拠のEBCDICに対応しています。
EBCDICは各社によって微妙にコードが異なるので、その他のメーカーのコードに対応する場合はプログラム中にある変換コードのテーブルをカスタマイズしてください。
プログラムコード
' ' EBCDIC → Shift-JIS変換(ConvToSjis.vbs) ' ' EBCDICファイルをShift-JISファイルに変換します。 ' ' (使い方) ' ConvToSjis.vbs 変換するファイル名 変換後のファイル名 ' ' Option Explicit Dim objParm Dim objFileSys Dim strReadFilePath Dim strWriteFilePath Dim objReadStream Dim objWriteStream Dim strText Dim strConv Dim ByteArray Dim i, j Dim b Set objParm = Wscript.Arguments If objParm.Count < 2 Then WScript.echo "コマンドライン引数が足りません" WScript.Quit End If strReadFilePath = objParm(0) strWriteFilePath = objParm(1) Set objFileSys = CreateObject("Scripting.FileSystemObject") objFileSys.CreateTextFile strWriteFilePath Set objReadStream = CreateObject("ADODB.Stream") Call objReadStream.Open() objReadStream.Type = 1 'Binary objReadStream.LoadFromFile(strReadFilePath) If objReadStream.Size >= 1 Then ReDim a(objReadStream.Size - 1) j = 0 For i = 1 To objReadStream.Size a(j) = AscB(objReadStream.Read(1)) j = j + 1 Next Set objWriteStream = CreateObject("ADODB.Stream") Call objWriteStream.Open() objWriteStream.Type = 2 'Text objWriteStream.Charset = "ISO_8859-1:1987" b = Translate(a, EBCDIC_To_ASCII_Table()) For i = 0 To UBound(b) Call objWriteStream.WriteText(ChrW(b(i))) Next Call objWriteStream.SaveToFile(strWriteFilePath, 2) Call objWriteStream.Close() End If Call objReadStream.Close() Set objReadStream = Nothing Set objWriteStream = Nothing Set objFileSys = Nothing WScript.Echo "変換が完了しました。" '------------------------------------------------------------------------------ Function Translate(ByVal arrText, xlatTable) ' ' Uses a translation table to map arrText from one character set to another. ' Dim i, num, codeConv, numConv Redim arrConv(Ubound(arrText)) 'WScript.Echo Ubound(arrText) For i = 0 To UBound(arrText) num = arrText(i) 'WScript.Echo num codeConv = Mid(xlatTable, (num * 2) + 1, 2) Execute ("numConv = &H" & codeConv) arrConv(i) = numConv 'If i < 5 Then ' WScript.Echo i & ":'" & Hex(num) & "→" & Hex(numConv) & _ ' "(" & Chr(numConv) & ")" 'End If Next Translate = arrConv End Function Function EBCDIC_To_ASCII_Table() ' ' Returns the following table as a string for use by the Translate ' function to traslate an EBCDIC string to an ASCII-ISO/ANSI string. ' '(Fujitsu EBCDIC) ' 0 1 2 3 4 5 6 7 8 9 A B C D E F ' 0 00 01 02 03 9C 09 86 7F 97 8D 8E 0B 0C 0D 0E 0F :016 :................:O ' 1 10 11 12 13 9D 85 08 87 18 19 92 8F 1C 1D 1E 1F :032 :................:O ' 2 80 81 82 83 84 0A 17 1B 88 89 8A 8B 8C 05 06 07 :048 :................:O ' 3 90 91 16 93 94 95 96 04 98 99 9A 9B 14 15 9E 1A :064 :................:O ' 4 20 A1 A2 A3 A4 A5 A6 A7 A8 A9 5B 2E 3C 28 2B 21 :080 : 。「」、・ヲァィゥ[.<(+!:O ' 5 73 AA AB AC AD AE AF 20 B0 20 5D 5C 2A 29 3B 5E :096 :sェォャュョッ ー ]\*);^:O ' 6 2D 2F 20 63 64 65 66 67 68 69 7C 2C 25 5F 3E 3F :112 :-/ cdefghi|,%_>?:O ' 7 6A 6B 6C 6D 6E 6F 70 71 72 20 3A 23 40 61 3D 22 :128 :jklmnopqr :#@a=":O ' 8 20 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA 74 BB BC BD BE :133 : アイウエオカキクケコtサシスセ:0 ' 9 BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 75 76 CA CB CC :160 :ソタチツテトナニヌネノuvハヒフ:0 ' A 77 7E CD CE CF D0 D1 D2 D3 D4 D5 78 D6 D7 D8 D9 :176 :w~ヘホマミムメモヤユxヨラリル:O ' B 79 7A 20 20 62 20 26 27 20 20 DA DB DC DD DE DF :192 :yz b &' レロワン゙゚:O ' C 7B 41 42 43 44 45 46 47 48 49 E8 E9 EA EB EC ED :208 :{ABCDEFGHI......:O ' D 7D 4A 4B 4C 4D 4E 4F 50 51 52 EE EF F0 F1 F2 F3 :224 :}JKLMNOPQR......:O ' E 24 20 53 54 55 56 57 58 59 5A F4 F5 F6 F7 F8 F9 :240 :$.STUVWXYZ......:O ' F 30 31 32 33 34 35 36 37 38 39 FA FB FC FD FE FF :256 :0123456789......: ' ' 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F EBCDIC_To_ASCII_Table = _ "000102039C09867F978D8E0B0C0D0E0F101112139D8508871819928F1C1D1E1F" & _ "80818283840A171B88898A8B8C050607909116939495960498999A9B14159E1A" & _ "20A1A2A3A4A5A6A7A8A95B2E3C282B2173AAABACADAEAF20B0205D5C2A293B5E" & _ "2D2F20636465666768697C2C255F3E3F6A6B6C6D6E6F707172203A2340613D22" & _ "20B1B2B3B4B5B6B7B8B9BA74BBBCBDBEBFC0C1C2C3C4C5C6C7C8C97576CACBCC" & _ "777ECDCECFD0D1D2D3D4D578D6D7D8D9797A2020622026272020DADBDCDDDEDF" & _ "7B414243444546474849E8E9EAEBECED7D4A4B4C4D4E4F505152EEEFF0F1F2F3" & _ "2420535455565758595AF4F5F6F7F8F930313233343536373839FAFBFCFDFEFF" End Function '参考 'http://support.microsoft.com/kb/216399/ja 'http://moritora.seesaa.net/article/272675855.html 'http://moritora.seesaa.net/article/272835611.html 'http://www.hitachi.co.jp/Prod/comp/soft1/manual/pc/d3J3820/ISUS0268.HTM 'http://mobile.shinsv.dyndns.org/strings_code/
このページのURL: