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

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/
このページを共有:
  • このページをはてなブックマークに追加 このページを含むはてなブックマーク
  • このページをlivedoor クリップに追加 このページを含むlivedoor クリップ
  • このページをYahoo!ブックマークに追加
  • このページを@niftyクリップに追加
  • このページをdel.icio.usに追加
  • このページをGoogleブックマークに追加

このページのURL:

ページ新規作成

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

TOP