On Sun, 02 Mar 2008 02:56:52 +0900
davi <davi-1984@...> さんwrote:
> ジッと読んでみると、「&& count != 0」が勘所なんですね。
そうですね。そこがわかれば問題解決ですね。なぜそのようにしているかとい
うと、ループの最初の時点ではtitleとprtitleの値が必ず違うので、このブロッ
クを実行してしまうのを避けているのです。ただ単にそれだけ。一行目を読めば、
prtitleにはtitleの値が入るので二行目以降はtitleと前の行のタイトルを比較
して制御できるようになります。
> この組み合わせの例ですが、END部分って、読み込んだファイル
> の最終行、その1行分“だけ”に対する処理だと見て良いので
> しょうか?
>
> ENDを殺して動かしてみましたが、最終レコード全体が出力され
> ませんでした。
>
> 創世記機械の出版年である1981だけが欠けて、
>
> |創世記機械,,山高昭 訳,創元推理文庫,
>
> と出力されるはずだと予想していたのですが…
>
> どうして最終レコード全体が出力されないのでしょう?
前の説明でおわかりになっていると思うのですが、レコードの出力処理は、title
とprtitleが違う場合にのみ出力するのです。したがって、最後の行を読んだ段
階ではまだtitleとprtitleの値は一緒ですから、出力しません。そこで出力する
とデータが未完成ですしね。出力してはいけないのです。ブロックの最初のほう
で一つ前のレコードを次の行のtitleを取得して出力してよいのかどうか条件判
断する構造になっているのです。
今回の例のように、データの規則性が複雑な場合には、ループを処理した後、
最後のデータを出力することになることが多いですね。それが私がワンパターン
になると言った意味です。
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html