■ ASCII 文字コードと EBCDIC 文字コードとの変換方法をvb2005で実現するには?

[Visual Basic Q & A 掲示板] [過去ログの一覧]


くまくま 2008/02/18(月) 12:06:47 <初心者>
下記サイトにてVBA用のコードを見つけvb2005で実現しようとしたのですが
うまく動きません どうすいればよいか教えていただきたいです
最終目標はEIAコード(ncドリルコード)をASCIIコードにしようと思っています。
http://support.microsoft.com/kb/216399/ja
自分のコード
Dim FullPaths As New ArrayList
    Dim sEBCDIC As String
    Dim sASCII As String
    Dim PPP As String

    Function Translate(ByVal InText As String, ByVal xlatTable As String) As String
        '
        ' 
        '一つの文字セットからもう一つまでInTextを図にするために、翻訳テーブルを使います。
        Dim Temp As String, I As Long
        Temp = Space(Len(InText)) '文字数分のエリアを確保する
        For I = 1 To Len(InText) 'intextの文字数だけ回す
            'Asc(Mid(InText, I, 1))これでバイナリー数値(10進数)になる
            Mid(Temp, I, 1) = Mid(xlatTable, Asc(Mid(InText, I, 1)) + 1, 1)
            'つまりxlatTable表のバイナリー数+1から1文字がTEMPの1文字に差し替わる
            'Asc()文字に対応する文字コードを表す整数型
        Next I
        Translate = Temp
    End Function

    Function ASCII_To_EBCDIC_Table() As String
        '
        'EBCDICストリングにアスキー-ISO/ANSIストリングを翻訳する
        'Translate機能による使用のためのストリングとして、
        '以下のテーブルを返します。
        ' 00 01 02 03 37 2D 2E 2F 16 05 25 0B 0C 0D 0E 0F
        ' 10 11 12 13 3C 3D 32 26 18 19 3F 27 1C 1D 1E 1F
        ' 40 5A 7F 7B 5B 6C 50 7D 4D 5D 5C 4E 6B 60 4B 61
        ' F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 7A 5E 4C 7E 6E 6F
        ' 7C C1 C2 C3 C4 C5 C6 C7 C8 C9 D1 D2 D3 D4 D5 D6
        ' D7 D8 D9 E2 E3 E4 E5 E6 E7 E8 E9 AD E0 BD 5F 6D
        ' 79 81 82 83 84 85 86 87 88 89 91 92 93 94 95 96
        ' 97 98 99 A2 A3 A4 A5 A6 A7 A8 A9 C0 4F D0 A1 07
        ' 20 21 22 23 24 15 06 17 28 29 2A 2B 2C 09 0A 1B
        ' 30 31 1A 33 34 35 36 08 38 39 3A 3B 04 14 3E E1
        ' 41 42 43 44 45 46 47 48 49 51 52 53 54 55 56 57
        ' 58 59 62 63 64 65 66 67 68 69 70 71 72 73 74 75
        ' 76 77 78 80 8A 8B 8C 8D 8E 8F 90 9A 9B 9C 9D 9E
        ' 9F A0 AA AB AC 4A AE AF B0 B1 B2 B3 B4 B5 B6 B7
        ' B8 B9 BA BB BC 6A BE BF CA CB CC CD CE CF DA dB
        ' DC DD DE DF EA EB EC ED EE EF FA FB FC FD FE FF
        '

        ASCII_To_EBCDIC_Table = _
        HexToStr("00010203372D2E2F1605250B0C0D0E0F101112133C3D322618193F271C1D1E1F") & _
        HexToStr("405A7F7B5B6C507D4D5D5C4E6B604B61F0F1F2F3F4F5F6F7F8F97A5E4C7E6E6F") & _
        HexToStr("7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6D7D8D9E2E3E4E5E6E7E8E9ADE0BD5F6D") & _
        HexToStr("79818283848586878889919293949596979899A2A3A4A5A6A7A8A9C04FD0A107") & _
        HexToStr("202122232415061728292A2B2C090A1B30311A333435360838393A3B04143EE1") & _
        HexToStr("4142434445464748495152535455565758596263646566676869707172737475") & _
        HexToStr("767778808A8B8C8D8E8F909A9B9C9D9E9FA0AAABAC4AAEAFB0B1B2B3B4B5B6B7") & _
        HexToStr("B8B9BABBBC6ABEBFCACBCCCDCECFDADBDCDDDEDFEAEBECEDEEEFFAFBFCFDFEFF")
    End Function

    Function EBCDIC_To_ASCII_Table() As String
        '
        ' Returns the following table as a string for use by the Translate
        ' function to traslate an EBCDIC string to an ASCII-ISO/ANSI string.
        '
        ' 00 01 02 03 9C 09 86 7F 97 8D 8E 0B 0C 0D 0E 0F    ....&#339;.&#8224;-&#129;E#381;.....
        ' 10 11 12 13 9D 85 08 87 18 19 92 8F 1C 1D 1E 1F    ....&#129;E...&#8225;..'&#129;E...
        ' 80 81 82 83 84 0A 17 1B 88 89 8A 8B 8C 05 06 07    &#8364;&#129;E#8218;&#402;"...&#710;&#8240;&#352;&#8249;&#338;...
        ' 90 91 16 93 94 95 96 04 98 99 9A 9B 14 15 9E 1A    &#129;E.""&#8226;-.&#732;(tm)&#353;&#8250;..&#382;.
        ' 20 A0 A1 A2 A3 A4 A5 A6 A7 A8 D5 2E 3C 28 2B 7C    . &#161;&#162;&#163;&#164;&#165;&#166;&#167;...<(+|
        ' 26 A9 AA AB AC AD AE AF B0 B1 21 24 2A 29 3B 5E    &(c)&#170;"&#172;&#173;(r)&#175;&#176;&#177;!$*);^
        ' 2D 2F B2 B3 B4 B5 B6 B7 B8 B9 E5 2C 25 5F 3E 3F    -/&#178;&#179;&#180;&#181;&#182;&#183;&#184;&#185;.,%_>?
        ' BA BB BC BD BE BF C0 C1 C2 60 3A 23 40 27 3D 22    &#186;"1/41/23/4&#191;...`:#@'="
        ' C3 61 62 63 64 65 66 67 68 69 C4 C5 C6 C7 C8 C9    .abcdefghi......
        ' CA 6A 6B 6C 6D 6E 6F 70 71 72 CB CC CD CE CF D0    .jklmnopqr......
        ' D1 7E 73 74 75 76 77 78 79 7A D2 D3 D4 5B D6 D7    .~stuvwxyz...[..
        ' D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 5D E6 E7    .............]..
        ' 7B 41 42 43 44 45 46 47 48 49 E8 E9 EA EB EC ED    {ABCDEFGHI......
        ' 7D 4A 4B 4C 4D 4E 4F 50 51 52 EE EF F0 F1 F2 F3    }JKLMNOPQR......
        ' 5C 9F 53 54 55 56 57 58 59 5A F4 F5 F6 F7 F8 F9    \.STUVWXYZ......
        ' 30 31 32 33 34 35 36 37 38 39 FA FB FC FD FE FF    0123456789......
        '
        EBCDIC_To_ASCII_Table = _
        HexToStr("000102039C09867F978D8E0B0C0D0E0F101112139D8508871819928F1C1D1E1F") & _
        HexToStr("80818283840A171B88898A8B8C050607909116939495960498999A9B14159E1A") & _
        HexToStr("20A0A1A2A3A4A5A6A7A8D52E3C282B7C26A9AAABACADAEAFB0B121242A293B5E") & _
        HexToStr("2D2FB2B3B4B5B6B7B8B9E52C255F3E3FBABBBCBDBEBFC0C1C2603A2340273D22") & _
        HexToStr("C3616263646566676869C4C5C6C7C8C9CA6A6B6C6D6E6F707172CBCCCDCECFD0") & _
        HexToStr("D17E737475767778797AD2D3D45BD6D7D8D9DADBDCDDDEDFE0E1E2E3E45DE6E7") & _
        HexToStr("7B414243444546474849E8E9EAEBECED7D4A4B4C4D4E4F505152EEEFF0F1F2F3") & _
        HexToStr("5C9F535455565758595AF4F5F6F7F8F930313233343536373839FAFBFCFDFEFF")

    End Function

    Function HexToStr(ByVal HexStr As String) As String
        Dim Temp As String, I As Long
        Temp = Space(Len(HexStr) \ 2) '(Len(HexStr)で文字数が64)/2で32のスペースをTEMPに確保
        For I = 1 To (Len(HexStr) \ 2)
            Mid(Temp, I, 1) = Chr(Val("&H" & Mid(HexStr, I * 2 - 1, 2))) '指定された文字コードに対応する文字を返します。
        Next I

        HexToStr = Temp
    End Function
    Private Sub Form1_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop
        Dim FileName As String
        Dim I As Integer = 0
        Do
            FileName = CType(e.Data.GetData(DataFormats.FileDrop), String())(I)
            I = I + 1
            FullPaths.Add(FileName)
            ListBox1.Items.Add(IO.Path.GetFileName(FileName))
        Loop Until ("" = CType(e.Data.GetData(DataFormats.FileDrop), String())(I))
    End Sub

    Private Sub Form1_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter
        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            e.Effect = DragDropEffects.Copy
        Else
            e.Effect = DragDropEffects.None
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim St As String
        For Each St In FullPaths
            '読み込み
            Dim Reader As New IO.StreamReader(St)
            sASCII = Reader.ReadToEnd
            Reader.Close()
            sEBCDIC = Translate(sASCII, ASCII_To_EBCDIC_Table())
            '書き込み
            Dim Writer As New IO.StreamWriter(IO.Path.ChangeExtension(St, TextBox1.Text))
            Writer.WriteLine(sEBCDIC)
            Writer.Close()
        Next
        MsgBox("変換終了")
    End Sub

やじゅ 2008/02/18(月) 12:38:41
>うまく動きません 
うまく動きませんは、どのようにうまく動かないのでしょうか?
説明してください。
どこまで正常に動いて、どこがおかしいのか
コンパイルエラーとなっているのか、実行時におかしいのか

ソースコード書いてあったも、解析して指摘するのは大変なのよ。

くまくま 2008/02/18(月) 13:10:09 <初心者>
説明不足ですいません
うまく動かない内容は、
ASCIIからEBCDICに変換する時バイナリーコードのF0〜F9が
動かず00で処理されてしまうのです
確認方法はバイナリーエディタ(Stirling )を使っています。
コンパイラエラーはありません

YuO [E-Mail] 2008/02/18(月) 13:56:12
ASCIIコードに0x80以上のコードはありません。
変換先の本来のコードは,ISO-8859-1等の別のコードではないですか?

くまくま 2008/02/18(月) 13:57:21 <初心者>
説明不足でごめんなさい
>>ASCIIからEBCDICに変換する時バイナリーコードのF0〜F9が
つまりASCIIでの0〜9がEBCDICの0〜9にならないと言うことでした
他の部分も動く所と動かない所があり
Function HexToStr(ByVal HexStr As String) As String
の所があやしいと思っているのですが・・・

YuO [E-Mail] 2008/02/18(月) 15:51:40
元の記事はVB6までを対象としているのですね。
それであれば,VB2005ではそのまま使うことはできません。

Unicodeを文字集合としない文字コードを使うなら,Byte配列を使ってください。
その上で,文字列にしたいのであればChar配列に代入後Stringのコンストラクタを使って変換します。

これ以上の話は,VB2005とのことなので,
・Visual Basic .NET掲示板
・Visual Basic 初心者掲示板
のどちらかで行ってください。

くまくま 2008/02/18(月) 17:19:58 <初心者>
書き込み場所間違ってましたすいません。

くまくま 2008/02/18(月) 17:40:06 <初心者>
[[解決]]

YuO様、やじゅ様 ご意見ありがとうございました。
たいへん助かりました、
Byte配列やChar配列をもっと勉強しようと思います。

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library