EBCel(固定長ファイルをMS-Excelに展開:文字コード変換付)

 MS-Excelシートの比較、csvファイルの比較、となると「固定長ファイルの比較」をしたくなるのはある意味当然と言わざるを得ない。
 まあ、入力ファイルを指定バイト数で分けてセルにはめ込んでゆく、なので「そーんなに大変ではない」はずなのだが、やるのはあたしである。便利にしようと無理をする。  元々がテスト結果の検証を楽にしよう、という発想なので
元ファイルがSJISだろうが、EBCDICだろうがPack10進数だろうがどんときやがれ!要するに扱えるようにしたのである。そのかわり、比較ツールに組み込むのではなく、まずはMS-Excelに読み込むツールを作ることにした。

 SJISのみならずEBCDICやPack10進を扱う以上、バイナリで読み込むのは必須。するとMS-Excelが狂い始めたか!?という事象に出会った。デバッガで出てくる数値が16進ではなくて10進なので頭の中で換算したが(電卓も叩きましたけど)、やはり狂っている。ちなみに原データはいちいちバイト型で読み込んでます。どうやらそれを文字列型で読み替えた途端狂うようだ。
 気が付けば「そういうことか」なんだけども、文字列型に代入すると同時に文字コードをUNICODEに変換しているようなのよね。ときどきMS-Excelの動作が極端に遅くなる理由が推測できた。コード変換テーブルがうまくキャッシュに載らない場合、変換に時間がかかっておるのではなかろうか。
 とにかく油断するとUNICODEになるので、Pack10進を数値化するのに文字コードを数値と捉えて16の剰余系をとり・・・という定番のロジックが使えない。SJISも1バイト単位で扱うので、2バイト文字がまじるとうまく変換のタイミングを図らないと1バイト単位でUNICODEになってしまうのでどうにもならない。EBCDIC→ASCII変換はマイクロソフトがサンプルコードを載せてくれているので安心していたら発狂したような文字列を返す。そうだ、マイクロソフトなんだ、まともなコードを提供してくれるわけがない。その他にも検索するとヒットする誰かが書いてくれたPack十進を変換するコード、ことごとく役に立ちませんから。固定長を分割するサンプルコード、これもいろいろな人が書いてくれていますが、汎用性が足りません。
 でも私はやった。何度も失敗して修正して、ちゃんと動いた。初めてソースを公開したくないと思った。だって勿体ない。これ値段付けて売れるよ。そもそも今の私、汎用機のデータを直接MS-Excelで扱う必要ないのに作ったもんね。(MyHopeも公開してませんがこれは失敗だったかも。ソースはMOの中なんで取り出しようがございません。日立に腹立って出さなかったんだけどね。)

 考えてみてよ。ダンプリストを出力して、物差し当ててマーカー片手にチェックしていく労力が大幅に削減できるんだよ。昔のアタシだったら買うよ。
 もっとも周囲のメインフレーマーに見せても誰もほしいと言わなかったので、どうしようかねえ。Packが直接扱えるということと、MS-Excelで戻ってくるというところで大昔作ったEBC2ASCよりも優れていたりする。速度もいろいろテクニックを覚えたので文字列部分はそこそこ速い。シートに貼り付けるのは思い切り速い。
 Vectorに登録して、新しくホームページエリアもらうタネくらいにはなるかなあ。

フリーソフト開発秘話、目次
ホーム