Line Buffer Overflow…

書くことが多過ぎるとき、バッファーとしてこちらに書きます。不定期更新です。

己を信じよ…

Excelのお話。

 

とあるシステムAが吐き出した表を、別のシステムBにかけます。

 

システムAは見やすいように、ヘッダー部分に続くデータは、属性ごとに欄を分けてあります。

わかりやすく書くと、「赤」「緑」「青」の欄が切ってあって、赤が100売れたら、赤の欄に「100」。

緑が50売れたら、「緑」の欄に「50」が入ります。

そのほかは、ゼロです。

 

属性ごとに和を出すのには、簡単です。

でも、各色の割合とかを出すには、めんどくさい。

システムBで様々な分析をしようと思ったら、色用に一欄、値用に一欄の方が、都合がいいのです。

色欄は赤、緑、…

値欄は100、50、…てな形式ですね。

 

なので、変換プログラムを作りました。

各欄の値を読み取って、所定の欄に適切な値を埋め込みます。

 

最初に走らせてみたら、遅い。

Excelは「応答なし」になってしまいました。

プログラムを止めてみます。

でも、プログラムは帰って来ず、再起動。

 

こんなとき、最もこわいのは、「無限ループ」

ループの終了条件を間違うと、回りっぱなしのループになってしまうことがあります。

この場合、ループカウンタが、その他どれかの変数がオーバーフローするまで回った挙げ句、クラッシュなので、変数の値も取れません。

 

出来たら避けたい不具合ので、普段から、その部分は慎重に作ります。

プログラムを見直してみても、そんなはずはないんだけどな…

いや、どっか間違えた?!

 

試行錯誤が続きました。

 

ついに、ある手段を。

いわゆる「プログレスバー」の設置。

どれくらい処理が終わったかを、棒グラフで表してみたんです。

 

そしたら、「プログラムの進行、思ったよりもずっと、遅い遅い!」

数分後のレベルでは、処理は1/5も、終わってない。

つまり、さっき僕が慌てて止めたときは、プログラムのカウンターははち切れることなく、むしろずっとずっと手前!

正しく、一生懸命!計算していたようなのです。

 

ならばと、今度はひたすら、「待つ!」

5分、8分、10分、…

表示が止まっても、「待つ!!」

 

13分経った時、表示が帰ってきました。

処理が、終わったのです。

「正しく!」

検算しましたから、間違いありません。

 

プログラムを組んでいると、いろんな不具合にぶち当たります。

プログラムなんて、そもそも一発で動く方が、稀なぐらい。

慣れてくると、不具合の前兆なんかも、わかっては来るんですが…

 

時には、「信じて待つ」ことも、必要なんですね。

「己を、信じて」

「プログラムを、信じて」

 

プログラムは言われたとおり、「一生懸命!」動作してるんですからね。