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

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


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

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/

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

ページ新規作成

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

TOP