2000年対応のプロジェクトで銀座の外れで仕事をし始めてまもなくの頃。
COBOLソースでヤバそうな箇所をコンパイルリストを見ながらチェックするようにとの指示だった。蛍光ペン必須。
COBOLはデータ定義する部分と処理を記述する部分が分かれている。行番号も付加されており、コンパイルオプションにもよるのだが、変数定義部には処理で使われている行番号が、処理には使われている変数の定義行番号が、それぞれ行の右側に羅列される。
コンパイルリストをPCにエクスポートし、この行番号を利用してVBAで2000年問題の対処候補を絞り込めるだろうと提案し実装した。処理さえ出来てしまえば簡単である。あとは帰りに実行しておけば朝には怪しい箇所にチェックを付けたリストが保存される。
しばらくそれで行っていたが、ある時「なんかこれ、引っかかってきてないんだけれど」という指摘を受けた。
データを分解し、行をソートしてマッチング処理なんかをしていたのだが、ソート順が「文字順」になっていたのだ。
どういうことかというと、11 と 2 ならどちらが大きい?と判定させた場合、数字順なら 2 だが、文字順だと 11 が小さいと判断されてしまうのだ。行番号を利用して「数字順」に並んだという前提で処理をしていたため、いわゆる順ファイルのマッチング処理で網羅できなかったのだ。セルの設定で何とでもなるみたいだが、当時はミスってしまった。
Excelでソートをかける際、そういう落とし穴にはまらないようご注意を。