Excelのお話。
とあるシステムAが吐き出した表を、別のシステムBにかけます。
システムAは見やすいように、ヘッダー部分に続くデータは、属性ごとに欄を分けてあります。
わかりやすく書くと、「赤」「緑」「青」の欄が切ってあって、赤が100売れたら、赤の欄に「100」。
緑が50売れたら、「緑」の欄に「50」が入ります。
そのほかは、ゼロです。
属性ごとに和を出すのには、簡単です。
でも、各色の割合とかを出すには、めんどくさい。
システムBで様々な分析をしようと思ったら、色用に一欄、値用に一欄の方が、都合がいいのです。
色欄は赤、緑、…
値欄は100、50、…てな形式ですね。
なので、変換プログラムを作りました。
各欄の値を読み取って、所定の欄に適切な値を埋め込みます。
最初に走らせてみたら、遅い。
Excelは「応答なし」になってしまいました。
プログラムを止めてみます。
でも、プログラムは帰って来ず、再起動。
こんなとき、最もこわいのは、「無限ループ」
ループの終了条件を間違うと、回りっぱなしのループになってしまうことがあります。
この場合、ループカウンタが、その他どれかの変数がオーバーフローするまで回った挙げ句、クラッシュなので、変数の値も取れません。
出来たら避けたい不具合ので、普段から、その部分は慎重に作ります。
プログラムを見直してみても、そんなはずはないんだけどな…
いや、どっか間違えた?!
試行錯誤が続きました。
ついに、ある手段を。
いわゆる「プログレスバー」の設置。
どれくらい処理が終わったかを、棒グラフで表してみたんです。
そしたら、「プログラムの進行、思ったよりもずっと、遅い遅い!」
数分後のレベルでは、処理は1/5も、終わってない。
つまり、さっき僕が慌てて止めたときは、プログラムのカウンターははち切れることなく、むしろずっとずっと手前!
正しく、一生懸命!計算していたようなのです。
ならばと、今度はひたすら、「待つ!」
5分、8分、10分、…
表示が止まっても、「待つ!!」
13分経った時、表示が帰ってきました。
処理が、終わったのです。
「正しく!」
検算しましたから、間違いありません。
プログラムを組んでいると、いろんな不具合にぶち当たります。
プログラムなんて、そもそも一発で動く方が、稀なぐらい。
慣れてくると、不具合の前兆なんかも、わかっては来るんですが…
時には、「信じて待つ」ことも、必要なんですね。
「己を、信じて」
「プログラムを、信じて」
プログラムは言われたとおり、「一生懸命!」動作してるんですからね。