掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ASCII 文字コードと EBCDIC 文字コードとの変換方法をvb2005で実現するには? (ID:100306)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
一様 勉強した結果報告 EIAコードのOD(復帰)をOA(改行)に変更してありますので そのまま使う人がいたら気お付けてください Public Class Form1 Dim FullPaths As New ArrayList Dim sASCII As String Dim Buffer() As Byte Dim EBC As String = "000102039C09867F978D8E0B0C0D0E0F101112139D8508871819928F1C1D1E1F" & _ "80818283840A171B88898A8B8C050607909116939495960498999A9B14159E1A" & _ "20A0A1A2A3A4A5A6A7A8D52E3C282B7C26A9AAABACADAEAFB0B121242A293B5E" & _ "2D2FB2B3B4B5B6B7B8B9E52C255F3E3FBABBBCBDBEBFC0C1C2603A2340273D22" & _ "C3616263646566676869C4C5C6C7C8C9CA6A6B6C6D6E6F707172CBCCCDCECFD0" & _ "D17E737475767778797AD2D3D45BD6D7D8D9DADBDCDDDEDFE0E1E2E3E45DE6E7" & _ "7B414243444546474849E8E9EAEBECED7D4A4B4C4D4E4F505152EEEFF0F1F2F3" & _ "5C9F535455565758595AF4F5F6F7F8F930313233343536373839FAFBFCFDFEFF" Dim EBCDIC_Table() As Byte = GetBytes(EBC) Dim sEIA As String = "003132033405063738090A250C0D0E0F20111233143536171839281B1C1D1E1F" & _ "3021225424565727285A082B2C2D2E2F302F53335535365859393A2C3C3D3E3F" & _ "2D41424C444E4F474852294B4C4D4E4F504A4B534D55565051595A5B5C5D5E5F" & _ "604142634465664748696A2E6C6D6E6F2B7172437445467778497A7B7C7D7E7F" & _ "0A8182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F" & _ "A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF" & _ "C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF" & _ "E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF" Dim EIA_Table() As Byte = GetBytes(sEIA) Function GetBytes(ByVal HexDecString As String) As Byte() '16進数表現の文字列を2文字ずつに区切り、 'その表現に対応する数値の配列を返すメソッド。 Dim i As Long Dim Length As Long Dim ret(0) As Byte '入力の長さを求める Length = Len(HexDecString) \ 2 If Length > 0 Then '入力がある場合だけ処理をする 'retの初期化 ReDim ret(Length - 1) 'retに代入していく For i = 1 To Length ret(i - 1) = Val("&h" & Mid$(HexDecString, i * 2 - 1, 2)) Next End If '戻り値を設定 GetBytes = ret 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 Dim sC As String = "IBM290" For Each St In FullPaths If RadioButton1.Checked Then '読み込み Dim Reader As New IO.StreamReader(St, System.Text.Encoding.GetEncoding(sC)) sASCII = Reader.ReadToEnd Reader.Close() '書き込み Dim Writer As New IO.StreamWriter(IO.Path.ChangeExtension(St, TextBox1.Text), False, System.Text.Encoding.ASCII) Writer.WriteLine(sASCII) Writer.Close() ElseIf RadioButton2.Checked Then 'この変数に、ファイルのバイナリを格納します。 'Dim Buffer() As Byte 'ファイルの読み込みを行う部分です。 '第2引数以降は、必要に応じて変更してみて下さい。 Dim DataFile As New System.IO.FileStream(St, IO.FileMode.Open) 'データファイルのサイズを調べています。 Dim FileSize As Integer = CInt(DataFile.Length) If FileSize = 0 Then '空のファイルであれば、データを読み込む必要も無いので、 'ファイルは読まず、テキストボックスを空にしています。 'Me.TextBox1.Clear() Else 'データがあった場合、データサイズに合わせて配列サイズを決定します。 '今回は、データ量と同サイズの配列を用意しています。 ReDim Buffer(FileSize - 1) '用意した配列にデータを読み込みます。 '下記では、「Buffer(0)〜Buffer(FileSize-1)」に対して読み込ませています。 DataFile.Read(Buffer, 0, FileSize) '★★ '置換コード For I As Integer = 0 To Buffer.Length - 1 '文字数だけ回す 'Buffer(I) = EBCDIC_Table(Buffer(I)) Buffer(I) = EIA_Table(Buffer(I)) Next I '受け取った配列を、BitConverterクラスを利用して、 'TextBoxに表示させます。 'Me.TextBox2.Text = System.BitConverter.ToString(Buffer)'beas64表記 End If '開いたファイルは、最後に必ず閉じる必要があります。 DataFile.Close() '書き込みの部分 Dim outFile As New System.IO.FileStream(IO.Path.ChangeExtension(St, TextBox1.Text), IO.FileMode.Create) outFile.Write(Buffer, 0, Buffer.Length) outFile.Close() End If Next MsgBox("変換終了") End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click FullPaths.Clear() ListBox1.Items.Clear() End Sub End Class
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.