Top/VBS/シフトJISファイルをEBCDICに変換する
- 追加された行はこの色です。
- 削除された行はこの色です。
//VBS/シフトJISファイルをEBCDICに変換する
*VBSによる変換
-http://support.microsoft.com/kb/216399/ja
Microsoftのサイトに、VBAを使った変換用プログラムがありました。
それを利用して、VBSで変換ツールを自作しました。
*使い方
後述のプログラムを「ConvEbcdic.vbs」という名前で保存してください。
後述のプログラムを「ConvToEbcdic.vbs」という名前で保存してください。
以下の方法で実行すると変換ファイルが作成されます。
ConvEbcdic.vbs 変換するファイル名
ConvToEbcdic.vbs 変換するファイル名 変換後のファイル名
このプログラムは「富士通」準拠のEBCDICに対応しています。
EBCDICは各社によって微妙にコードが異なるので、その他のメーカーのコードに対応する場合はプログラム中にある変換コードのテーブルをカスタマイズしてください。
*プログラムコード
'
' Shift-JIS → EBCDIC変換(ConvEbcdic.vbs)
' Shift-JIS → EBCDIC変換(ConvToEbcdic.vbs)
'
' Shift-JISファイルをEBCDICファイルに変換します。
'
' ConvEbcdic.vbs 変換するファイル名
' (使い方)
' ConvToEbcdic.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, ASCII_To_EBCDIC_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()
'
' 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" & _
' "7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E3E4E5E6E7E8E94A5B005F6D" & _
' "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" & _
"7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E3E4E5E6E7E8E94A5B005F6D" & _
"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/