VB6.0で固定長テキストを扱おうとしているのですが、
普通にテキストファイルを読み込むと
バイナリで16進「00」のバイト(文字?)が勝手に読み飛ばされて
テキストのバイト(文字)数がずれてしまいます。
外部システムの連携ファイルなので、発生を止めることはできません。
読み込む際、テキストファイルをバイナリで開いて「00」を半角スペースの「20」に変換して、更にそのバイナリをテキストに変換して出力するというような回避法くらいしか思いつかないのですが、そういったことは可能でしょうか?
00が来ている時点で、それはテキストファイルとは呼べないと思います。
テキストデータを含んだバイナリファイル、と認識した方が良いかも。
とりあえず、バイナリとして読み込んだ後、&H00 → &H20 に置き換えてから、
StrConv() で文字列化してみてはいかがでしょうか。
何に読み込んでいるかは知りませんが、リッチテキストを使って
一発で解決する方法もあるかな。
RichTextBox1.LoadFile FileName
RichTextBox1.Text = Replace(RichTextBox1.Text, Chr(0), Chr(32))
推測ですが、それは何かの構造体の値を書き出したファイルなんじゃないでしょうか?
それだったらVBでも同じような構造体を宣言してGetで読み込めばいいだけのような。
私も同じような作業をしています(UTF16-LittleEndianのファイルですが。)
ご質問の内容あ
ADODB.StreamをつかってvbNullCharを半角スペースに置換して
再度別ファイルに保存するといった感じで出来ています。
#普通にBinaryModeでOpenしてもできたのですが、扱うファイルが
#何百MB規模になると、ADODB.Streamの方が早いのでこっちにしました:)
> #何百MB規模になると、ADODB.Streamの方が早いのでこっちにしました:)
情報thx!
情報ありがとうございます!
今回は自分の考えとソースに一番近かったので魔界の仮面弁士さんの
ご意見を使わせていただいて、バイナリでOpenして、
StrConv(InputB(256, #1), vbUnicode)
と変換したら無事にバイトずれせずに読み込むことができました。
他のご意見も処理速度が早くなりそうなのでいろいろ検証させていただこうと思います。
ありがとうございました。
ツイート | ![]() |