
すいません、教えて下さい。
Byte型で読み込んだ内容を指定した固定長で出力したいです。
例えば、次のテキストファイルがあります。
【読み込み元.txt】
-------------------------------------------------------
ABC123
-------------------------------------------------------
文字コードをSJISとしてバイナリ値では「41 42 43 31 32 33」となります。
この値を次のように出力したいです。
【出力先.txt】(3バイト区切りとする)
-------------------------------------------------------
414243
313233
-------------------------------------------------------
なんとか自力で近しい?とこまで行けたのかなと思いますが
肝心の出力がうまくいきません。
【VB.Net】
-------------------------------------------------------
Dim BUFSIZE As Integer = 2048 ' 1度に処理するサイズ
Dim buf(BUFSIZE) As Byte ' 読み込み用バッファ
Dim readSize As Integer ' Readメソッドで読み込んだバイト数
Dim srcName As String = "C:\Temp\A.txt" ' 読み込み元
Dim detName As String = "C:\Temp\B.txt" ' 出力先
' 処理開始
Using src As New FileStream(srcName, FileMode.Open, FileAccess.Read)
Using dest As New FileStream(destName, FileMode.Create, FileAccess.Write)
While True
' 読み込み
readSize = src.Read(buf, 0, BUFSIZE)
' 読み込むものが無ければ終了
If readSize = 0 Then Exit While
' 直接16進数を指定固定長で書き込みしたい部分
For i As Integer = 0 To readSize - 1
msgbox buf(i)
Next
' 書き込み実行
dest.Write(buf, 0, readSize)
End While
End Using
End Using
-------------------------------------------------------
大変お手数ですがご教示頂ければと思います。
No.2ベストアンサー
- 回答日時:
入力ファイルの各バイトを
ただ単純に16進数表記で出力するプログラムです。
適当に改造すれば目的のこともできるでしょう。
========================================
' インデントに全角空白を使っています。要削除。
Class Bin2HexText
Shared Sub main(ByVal args As String())
Dim srcName As String = args(0) ' 入力ファイル名
Dim destName As String = args(1) ' 出力ファイル名
Dim BUFSIZE As Integer = 2048 ' 1度に処理するサイズ
Dim buf(BUFSIZE) As Byte ' 読み込み用バッファ
Dim readSize As Integer ' Readメソッドで読み込んだバイト数
Using src As New System.IO.FileStream( _
srcName, System.IO.FileMode.Open, System.IO.FileAccess.Read)
' 出力ファイルはテキストファイルとして扱う
Using dest As New System.IO.StreamWriter( _
destName, False, System.Text.Encoding.GetEncoding("shift_jis"))
While True
readSize = src.Read(buf, 0, BUFSIZE) ' 読み込み
If readSize = 0 Then
Exit While ' 完了
End If
For i As Integer = 0 To readSize - 1
' Byte型数値を16進数表記(文字列)に変換して出力
dest.Write( String.Format("{0:X2} ", buf(i)) )
Next
End While
End Using
End Using
End Sub
End Class
No.1
- 回答日時:
「固定長」とありますが、「1行が6文字のテキストファイル」ということでよろしいですか?
それなら、次の方法でよいのでは。
ToString、format等で Byte→2文字の16進数文字列にする
↓
3つ分出力したら、改行を出力する
http://msdn.microsoft.com/ja-jp/library/dwhawy9k …
この回答への補足
試しにAの文字列をbyte型に直して10進「65」を6と5にばらして
今度は6,5のそれぞれのbyteを取得する事が出来たんですけど
それをどうやってbufへ格納してファイルに書き出して良いのかわかんないです、、、。
-----------------------
' Byte書き込み
For i As Integer = 0 To readSize - 1
n = buf(i)
For j As Integer = 1 To Len(n)
MsgBox(Asc(Mid(n, j, 1)))
Next
Next
-----------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
Microsoft365で作ったword文書...
-
Accessのテーブルからcsv出力す...
-
4Kの外部モニターに出力すると...
-
プログラムについての質問です...
-
cout と cerrの違い
-
C#でアクセス権限の取得方法が...
-
センサーのタンパー出力について
-
PHPのGDで折れ線グラフを作成中...
-
coutで出力した文字を消去する...
-
C# 標準出力のencodingをutf8に...
-
リッチテキストをテキストに変換
-
ActiveReportsで縦書きの帳票
-
TV出力ポートをOFFにすれば良い...
-
printfの書式%.*s
-
COBOLで可変長ファイルの出力に...
-
スマホ充電器購入にあたり
-
FLEXSOLARパネルからAmazonで買...
-
makeで文字化けする。migwのmak...
-
PD充電器について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
プログラムについての質問です...
-
Accessのテーブルからcsv出力す...
-
FLEXSOLARパネルからAmazonで買...
-
真空管 300 B の前段について
-
cout と cerrの違い
-
printfとputcharの違いは
-
スマホ充電器購入にあたり
-
PD充電器について
-
TV出力ポートをOFFにすれば良い...
-
COBOLのMOVEで桁数が異なる場合
-
Windows Formアプリからコンソ...
-
CrystalReportの文字列の折返し...
-
C#でアクセス権限の取得方法が...
-
coutで出力した文字を消去する...
-
【UWSC】WEBページ中の特定文字...
-
KEYENCEのシーケンスプログラム...
-
CRC16計算について
-
標準出力の上書き
おすすめ情報