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

VBS/EBCDICファイルをシフトJISに変換する のバックアップの現在との差分(No.1)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
//VBS/EBCDICファイルをシフトJISに変換する
***//VBS/EBCDICファイルをシフトJISに変換する
*VBSによる変換
-http://support.microsoft.com/kb/216399/ja

Microsoftのサイトに、VBAを使った変換用プログラムがありました。
それを利用して、VBSで変換ツールを自作しました。

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

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

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

*プログラムコード

 '
 ' Shift-JIS → EBCDIC変換(ConvEbcdic.vbs)
 ' EBCDIC → Shift-JIS変換(ConvToSjis.vbs)
 '
 '   Shift-JISファイルをEBCDICファイルに変換します。
 '   EBCDICファイルをShift-JISファイルに変換します。
 '
 '   ConvEbcdic.vbs 変換するファイル名
 '   (使い方)
 '     ConvToSjis.vbs 変換するファイル名 変換後のファイル名
 '
 '   元ファイルは保持されます。変換後のファイルは、拡張子ebc
 '   をつけて保存されます。
 '
 Option Explicit
 
 Dim objParm
 Dim strReadFileName
 Dim strWriteFileName
 Dim objFileSys
 Dim strScriptPath
 Dim strReadFile
 Dim strReadFilePath
 Dim strWriteFilePath
 Dim objReadStream
 Dim strWriteFile
 Dim objWriteStream
 Dim strText
 Dim strConv
 Dim ByteArray
 Dim i, j
 Dim b
 
 Set objParm = Wscript.Arguments
 
 If objParm.Count < 1 Then
 If objParm.Count < 2 Then
     WScript.echo "コマンドライン引数が足りません"
     Return
     WScript.Quit
 End If
 
 strReadFileName = objParm(0)
 strWriteFileName = strReadFileName & ".ebc"
 strReadFilePath = objParm(0)
 strWriteFilePath = objParm(1)
 
 Set objFileSys = CreateObject("Scripting.FileSystemObject")
 
 strScriptPath = Replace(WScript.ScriptFullName, WScript.ScriptName, "")
 strReadFile = objFileSys.BuildPath(strScriptPath, strReadFileName)
 strWriteFile = objFileSys.BuildPath(strScriptPath, strWriteFileName)
 objFileSys.CreateTextFile strWriteFilePath
 
 objFileSys.CreateTextFile strWriteFile
 Set objReadStream = CreateObject("ADODB.Stream")
 Call objReadStream.Open()
 objReadStream.Type = 1 'Binary
 objReadStream.LoadFromFile(strReadFilePath)
 
 Set objReadStream = objFileSys.OpenTextFile(strReadFile, 1)
 Set objWriteStream = CreateObject("ADODB.Stream")
 If objReadStream.Size >= 1 Then
 
 Call objWriteStream.Open()
 objWriteStream.Type = 2 'Text
 objWriteStream.Charset = "ISO_8859-1:1987"
     ReDim a(objReadStream.Size - 1)
 
 If objReadStream.AtEndOfStream = False Then
     j = 0
     For i = 1 To objReadStream.Size
         a(j) = AscB(objReadStream.Read(1))
         j = j + 1
     Next
 
     strText = objReadStream.ReadAll
     Set objWriteStream = CreateObject("ADODB.Stream")
     Call objWriteStream.Open()
     objWriteStream.Type = 2 'Text
     objWriteStream.Charset = "ISO_8859-1:1987"
 
     strConv = Translate(strText, ASCII_To_EBCDIC_Table())
     b = Translate(a, EBCDIC_To_ASCII_Table())
 
     Call objWriteStream.WriteText(strConv)
     For i = 0 To UBound(b)
         Call objWriteStream.WriteText(ChrW(b(i)))
     Next
 
     Call objWriteStream.SaveToFile(strWriteFileName, 2)
     Call objWriteStream.SaveToFile(strWriteFilePath, 2)
     Call objWriteStream.Close()
 
 End If
 
 objReadStream.Close
 objWriteStream.Close()
 Call objReadStream.Close()
 
 Set objReadStream = Nothing
 Set objWriteStream = Nothing
 Set objFileSys = Nothing
 
 WScript.Echo "変換が完了しました。"
 
 '------------------------------------------------------------------------------
 Function Translate(ByVal InText, xlatTable)
 Function Translate(ByVal arrText, xlatTable)
     '
     ' Uses a translation table to map InText from one character set to another.
     ' Uses a translation table to map arrText from one character set to another.
     '
     Dim Temp, I, Letter, Num, LetterConv, CodeConv, NumConv
     Temp = ""
     Dim i, num, codeConv, numConv
     Redim arrConv(Ubound(arrText))
 
     'WScript.Echo InText
     'WScript.Echo Ubound(arrText)
 
     For I = 1 To Len(InText)
         Letter = Mid(InText, I, 1)
         Num = Asc(Letter)
         CodeConv = Mid(xlatTable, (Num * 2) + 1, 2)
         Execute ("NumConv = &H" & CodeConv)
         LetterConv = ChrW(NumConv)
         Temp = Temp & LetterConv
         'If I < 5 Then
         '   WScript.Echo I & ":'" & Letter & "'→" & _
         '   Hex(Num) & "→" & CodeConv & "→" & NumConv & "→'" & LetterConv & "'"
     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 = Temp
     Translate = arrConv
 
 End Function
 
 Function ASCII_To_EBCDIC_Table()
 Function EBCDIC_To_ASCII_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.
 ' function to traslate an EBCDIC string to an ASCII-ISO/ANSI 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" & _
 '   "7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E3E4E5E6E7E8E94A5B005F6D" & _
 '   "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 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
     ASCII_To_EBCDIC_Table = _
     "00010203372D2E2F1605150B0C0D0E0F101112133C3D322618193F271C1D1E1F" & _
     "404F7F7BE06CB6B74D5D5C4E6B604B61F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F" & _
     "7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E3E4E5E6E7E8E94A5B005F6D" & _
     "797DB463646566676869707172737475767778508B9B9CA0ABB0B1C06AD0A107" & _
     "202122232425061728292A2B2C090A1B30311A333435360838393A3B04143EE1" & _
     "57414243444546474849515253545556588182838485868788898A8C8D8E8F90" & _
     "9192939495969798999A9D9E9FA2A3A4A5A6A7A8A9AAACADAEAFBABBBCBDBEBF" & _
     "B2B3B4B5B6B7B8B9CACBCCCDCECFDADBDCDDDEDFEAEBECEDEEEFFAFBFCFDFEFF"
 '相違点
 '   (Hitachi) (Fujitsu)
 ' & 50        B6
 ' ' 7D        B7
 ' a 59        7D
 ' b 62        B4
 ' s 80        50
     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/

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

ページ新規作成

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

TOP