バイナリファイルの「00」を「20」に変換してテキストファイルで出力するには?

解決


づき  2005-11-15 05:15:55  No: 92637

VB6.0で固定長テキストを扱おうとしているのですが、
普通にテキストファイルを読み込むと
バイナリで16進「00」のバイト(文字?)が勝手に読み飛ばされて
テキストのバイト(文字)数がずれてしまいます。
外部システムの連携ファイルなので、発生を止めることはできません。
読み込む際、テキストファイルをバイナリで開いて「00」を半角スペースの「20」に変換して、更にそのバイナリをテキストに変換して出力するというような回避法くらいしか思いつかないのですが、そういったことは可能でしょうか?


魔界の仮面弁士  2005-11-15 06:54:20  No: 92638

00が来ている時点で、それはテキストファイルとは呼べないと思います。
テキストデータを含んだバイナリファイル、と認識した方が良いかも。

とりあえず、バイナリとして読み込んだ後、&H00 → &H20 に置き換えてから、
StrConv() で文字列化してみてはいかがでしょうか。


我龍院忠太  2005-11-15 07:01:35  No: 92639

何に読み込んでいるかは知りませんが、リッチテキストを使って
一発で解決する方法もあるかな。
   
RichTextBox1.LoadFile FileName
RichTextBox1.Text = Replace(RichTextBox1.Text, Chr(0), Chr(32))


030  2005-11-15 08:27:02  No: 92640

推測ですが、それは何かの構造体の値を書き出したファイルなんじゃないでしょうか?
それだったらVBでも同じような構造体を宣言してGetで読み込めばいいだけのような。


KG  2005-11-15 21:25:35  No: 92641

私も同じような作業をしています(UTF16-LittleEndianのファイルですが。)

ご質問の内容あ
ADODB.StreamをつかってvbNullCharを半角スペースに置換して
再度別ファイルに保存するといった感じで出来ています。

#普通にBinaryModeでOpenしてもできたのですが、扱うファイルが
#何百MB規模になると、ADODB.Streamの方が早いのでこっちにしました:)


ガッ  2005-11-16 00:54:17  No: 92642

> #何百MB規模になると、ADODB.Streamの方が早いのでこっちにしました:)
情報thx!


づき  2005-11-17 00:31:01  No: 92643

情報ありがとうございます!
今回は自分の考えとソースに一番近かったので魔界の仮面弁士さんの
ご意見を使わせていただいて、バイナリでOpenして、
StrConv(InputB(256, #1), vbUnicode)
と変換したら無事にバイトずれせずに読み込むことができました。
他のご意見も処理速度が早くなりそうなのでいろいろ検証させていただこうと思います。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加