Top/VBS/シフトJISファイルをEBCDICに変換する

VBS/シフトJISファイルをEBCDICに変換する の変更点


//VBS/シフトJISファイルをEBCDICに変換する
*VBSによる変換
Microsoftのサイトに、VBAを使った変換用プログラムがありました。
それを利用して、VBSで変換ツールを自作しました。

*使い方
後述のプログラムを「ConvToEbcdic.vbs」という名前で保存してください。
以下の方法で実行すると変換ファイルが作成されます。

 ConvToEbcdic.vbs 変換するファイル名 変換後のファイル名

このプログラムは「富士通」準拠のEBCDICに対応しています。
EBCDICは各社によって微妙にコードが異なるので、その他のメーカーのコードに対応する場合はプログラム中にある変換コードのテーブルをカスタマイズしてください。

*プログラムコード

 '
 ' Shift-JIS → EBCDIC変換(ConvToEbcdic.vbs)
 '
 '   Shift-JISファイルをEBCDICファイルに変換します。
 '
 '   (使い方)
 '     ConvToEbcdic.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, ASCII_To_EBCDIC_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 ASCII_To_EBCDIC_Table()
 '
 ' Returns the following table as a string for use by the Translate
 ' function to translate an ASCII-ISO/ANSI string to an EBCDIC string.
 '
 ' (Hitachi EBCDIK)
 '   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
 ' 0 00 01 02 03 37 2D 2E 2F 16 05 15 0B 0C 0D 0E 0F :016    :----------------:
 ' 1 10 11 12 13 3C 3D 32 26 18 19 3F 27 1C 1D 1E 1F :032    :----------------:
 ' 2 40 4F 7F 7B E0 6C 50 7D 4D 5D 5C 4E 6B 60 4B 61 :048    : !"#$%&'()*+,-./:
 ' 3 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 7A 5E 4C 7E 6E 6F :064    :0123456789:;<=>?:
 ' 4 7C C1 C2 C3 C4 C5 C6 C7 C8 C9 D1 D2 D3 D4 D5 D6 :080    :@ABCDEFGHIJKLMNO:
 ' 5 D7 D8 D9 E2 E3 E4 E5 E6 E7 E8 E9 4A 5B 5A 5F 6D :096    :PQRSTUVWXYZ[\]^_:
 ' 6 79 59 62 63 64 65 66 67 68 69 70 71 72 73 74 75 :112    :~abcdefghijklmno:
 ' 7 76 77 78 80 8B 9B 9C A0 AB B0 B1 C0 6A D0 A1 07 :128    :pqrstuvwxyz{|}~ :
 ' 8 20 21 22 23 24 25 06 17 28 29 2A 2B 2C 09 0A 1B :133    :----------------:
 ' 9 30 31 1A 33 34 35 36 08 38 39 3A 3B 04 14 3E E1 :160    :----------------:
 ' A 57 41 42 43 44 45 46 47 48 49 51 52 53 54 55 56 :176    : 。「」、・ヲァィゥェォャュョッ:
 ' B 58 81 82 83 84 85 86 87 88 89 8A 8C 8D 8E 8F 90 :192    :ーアイウエオカキクケコサシスセソ:
 ' C 91 92 93 94 95 96 97 98 99 9A 9D 9E 9F A2 A3 A4 :208    :タチツテトナニヌネノハヒフヘホマ:
 ' D A5 A6 A7 A8 A9 AA AC AD AE AF BA BB BC BD BE BF :224    :ミムメモヤユヨラリルレロワン゙゚:
 ' E B2 B3 B4 B5 B6 B7 B8 B9 CA CB CC CD CE CF DA DB :240    :----------------:
 ' F DC DD DE DF EA EB EC ED EE EF FA FB FC FD FE FF :256    :----------------:
 '
 '   ASCII_To_EBCDIC_Table = _
 '   "00010203372D2E2F1605150B0C0D0E0F101112133C3D322618193F271C1D1E1F" & _
 '   "404F7F7BE06C507D4D5D5C4E6B604B61F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F" & _
 '   "7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E3E4E5E6E7E8E94A5B5A5F6D" & _
 '   "79596263646566676869707172737475767778808B9B9CA0ABB0B1C06AD0A107" & _
 '   "202122232425061728292A2B2C090A1B30311A333435360838393A3B04143EE1" & _
 '   "57414243444546474849515253545556588182838485868788898A8C8D8E8F90" & _
 '   "9192939495969798999A9D9E9FA2A3A4A5A6A7A8A9AAACADAEAFBABBBCBDBEBF" & _
 '   "B2B3B4B5B6B7B8B9CACBCCCDCECFDADBDCDDDEDFEAEBECEDEEEFFAFBFCFDFEFF"
 
 '(Fujitsu EBCDIC)
 '   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
 ' 0 00 01 02 03 37 2D 2E 2F 16 05 15 0B 0C 0D 0E 0F :016    :----------------:
 ' 1 10 11 12 13 3C 3D 32 26 18 19 3F 27 1C 1D 1E 1F :032    :----------------:
 ' 2 40 4F 7F 7B E0 6C B6 B7 4D 5D 5C 4E 6B 60 4B 61 :048    : !"#$%&'()*+,-./:
 ' 3 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 7A 5E 4C 7E 6E 6F :064    :0123456789:;<=>?:
 ' 4 7C C1 C2 C3 C4 C5 C6 C7 C8 C9 D1 D2 D3 D4 D5 D6 :080    :@ABCDEFGHIJKLMNO:
 ' 5 D7 D8 D9 E2 E3 E4 E5 E6 E7 E8 E9 4A 5B 5A 5F 6D :096    :PQRSTUVWXYZ[\]^_:
 ' 6 79 7D B4 63 64 65 66 67 68 69 70 71 72 73 74 75 :112    :~abcdefghijklmno:
 ' 7 76 77 78 50 8B 9B 9C A0 AB B0 B1 C0 6A D0 A1 07 :128    :pqrstuvwxyz{|}~ :
 ' 8 20 21 22 23 24 25 06 17 28 29 2A 2B 2C 09 0A 1B :133    :----------------:
 ' 9 30 31 1A 33 34 35 36 08 38 39 3A 3B 04 14 3E E1 :160    :----------------:
 ' A 57 41 42 43 44 45 46 47 48 49 51 52 53 54 55 56 :176    : 。「」、・ヲァィゥェォャュョッ:
 ' B 58 81 82 83 84 85 86 87 88 89 8A 8C 8D 8E 8F 90 :192    :ーアイウエオカキクケコサシスセソ:
 ' C 91 92 93 94 95 96 97 98 99 9A 9D 9E 9F A2 A3 A4 :208    :タチツテトナニヌネノハヒフヘホマ:
 ' D A5 A6 A7 A8 A9 AA AC AD AE AF BA BB BC BD BE BF :224    :ミムメモヤユヨラリルレロワン゙゚:
 ' E B2 B3 B4 B5 B6 B7 B8 B9 CA CB CC CD CE CF DA DB :240    :----------------:
 ' F DC DD DE DF EA EB EC ED EE EF FA FB FC FD FE FF :256    :----------------:
 '
 '    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
     ASCII_To_EBCDIC_Table = _
     "00010203372D2E2F1605150B0C0D0E0F101112133C3D322618193F271C1D1E1F" & _
     "404F7F7BE06CB6B74D5D5C4E6B604B61F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F" & _
     "7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E3E4E5E6E7E8E94A5B5A5F6D" & _
     "797DB463646566676869707172737475767778508B9B9CA0ABB0B1C06AD0A107" & _
     "202122232425061728292A2B2C090A1B30311A333435360838393A3B04143EE1" & _
     "57414243444546474849515253545556588182838485868788898A8C8D8E8F90" & _
     "9192939495969798999A9D9E9FA2A3A4A5A6A7A8A9AAACADAEAFBABBBCBDBEBF" & _
     "B2B3B4B5B6B7B8B9CACBCCCDCECFDADBDCDDDEDFEAEBECEDEEEFFAFBFCFDFEFF"
 '相違点
 '   (Hitachi) (Fujitsu)
 ' & 50        B6
 ' ' 7D        B7
 ' a 59        7D
 ' b 62        B4
 ' s 80        50
 
 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/

-参考サイト
-http://support.microsoft.com/kb/216399/ja
http://support.microsoft.com/kb/216399/ja

ページ新規作成

新しいページはこちらから投稿できます。

TOP