以前の日記でも取り上げたが、他にもできるか考えてみる。
まず、Get ステートメントで Byte 型の配列に読込む方法。うーん。これは、InputB 関数を使う場合に比べて、それほどメリットがあるわけじゃないんだよなぁ。一部分だけ文字列化したい時に、一旦別の配列にコピーしてから StrConv しなければいけないので面倒くさい、というデメリットもある。VB には配列のスライシングってないので、要素をコピーしようとすると、ループで回すか、Win32 API に頼らなければならない。
次に、一旦テキストとして読込んでしまう方法。よく使われてるやつですね。FileSystemObject 経由でも古いステートメント (Input ステートメントとか) 使ってでもいいんだけど、一旦読込んだ後、StrConv で CP932 に戻す。で、必要な桁数で区切って、使う前にもう一度 StrConv で Unicode に戻す。この方法には、1 行の長さが不定な場合には、書くのが一番楽だ、というメリットがある。性能はがた落ちなので、遅くてもいい場合にしか使えないけど。
……うーん。手元の仕事では、「とりあえず一行読む→行の長さを確認→列ごとに分割→編集して出力」という流れにしたいんだけど、どの方法でもイマイチ。全力でやるなら、InputB を使う方法か、Byte 配列を使う方法にして、Java でいう BufferedReader 相当の機能を自分で実装することになるんだけど。めんどくさい。
もうひとつ、C ランタイムライブラリの関数を使う方法もありそうだけど、なんとなく、これは避けたいなぁ……。