【COBOL 読み1-10】30年度に会いましょう〜そろそろ読めるようになってきた

🧩 今日の学び
• READ文は「ファイルから1行読む」命令。
• AT END/NOT AT ENDで「終わった」「まだある」を判断できる。
• EOF-YESをTRUEにすることで、PERFORMループを自然に終了できる。

今日のコード

       READ-INFILE.
           READ INFILE
               AT END
                   SET EOF-YES TO TRUE
               NOT AT END
                   ADD 1 TO TOT-RECORDS
                   PERFORM PARSE-AND-VALIDATE
           END-READ.

なるお)まずなんだってー?

READ-INFILE.

INFILEを読むんでしょ?

READ INFILE

2回同じこと言われるとか、バカにしてる?
これだから老害は…

目次

段落と命令のちがいを噛みしめる

よく見ろよ、READ-INFILE. は 段落名(ラベル) だ。

ドットついてんだろ?
「ここから READ-INFILE っていう処理が始まりますよ」って看板立てただけのやつ。

係長)誰が老害だよ。

一方で「READ INFILE」は 命令文
「INFILE っていうファイルから1レコード読み込め」って指示してんだ。

な)え、じゃあ全然別物!?物忘れじゃない?

俺「二回言ってるじゃん!ダブってるじゃん!」って思ってましたけど!
係長は昨日の夜、何食べたか忘れてるんだろうなって思ってました。

係)なんでだよ!  (←実は忘れてる)
ま、まぁ、段落名と文法をゴッチャにすんなよ。

「ここは『ファイル読み取り処理』って段落です」ってラベルをつけて、その中で READ してるってわけだ。

な)…じゃあ、「おっすおら悟空!」って名札つけて、くらえ「太陽拳!」って太陽拳をくらわせる感じですか?目が眩む感じですか?

係)…「名札(段落名)」は呼び出し側(PERFORM)で使う用。
自己紹介(命令文)はマシンに向けて「読め!」って言ってるわけ。

な)あのー係長?
ラベルなんすか?段落名なんすか?なんかどっちも出てきてごちゃになる…

係) COBOL では「ラベル」って呼ばずに 段落名(Paragraph name) って言うのが正式だ。

段落名は
・READ-INFILE. とか INIT. とか MAIN. の部分
・PROCEDURE DIVISION の中に書ける
・文のまとまりの「タイトル」みたいなもの
・PERFORM 段落名 で呼び出して使う
という感じだ。

な)おー教則本ぽい!七三分けの銀行員っぽいすね!

AT END/NOT AT END:終わりと続きの分かれ道

で、INFILEをよみこむとして…

     AT END
                   SET EOF-YES TO TRUE
        NOT AT END
                   ADD 1 TO TOT-RECORDS
                   PERFORM PARSE-AND-VALIDATE

AT ENDとNOT AT ENDだから、終わったらこうで、終わらなかったらこうでということ?

30年後、あたしたちが生きていたら、、、この時間にこの場所で、また会いましょう。
あたしたちのどちらかでも、この世にいなかったら、、、今日でさようなら…ね。

みたいな?

係)なんかイラッとしたが、まぁ間違ってるわけではないな。

な)30年後先の話も書けますよ!書きますか?

係)いるわけねーだろ。

な)むー、別れた二人がどうなったか気にならないとは。
愛を忘れちゃったんすか…

AT END

ファイルの終わり(End Of File=EOF)に達したときの処理を書く。

ここでは SET EOF-YES TO TRUE。
つまり「もうファイルの終わりだよ」って旗を立てる。

NOT AT END

まだ読み込むレコードがあったときにやる処理。
今回は「レコード数カウントして」「そのデータを検証に回す」。

       READ-INFILE.
           READ INFILE
               AT END
                   SET EOF-YES TO TRUE
               NOT AT END
                   ADD 1 TO TOT-RECORDS
                   PERFORM PARSE-AND-VALIDATE
           END-READ.

ふふ、係長全部わかっちゃいましたよ。

EOF-YESが真になる瞬間

な)なにかが終わったら、EOF-YESをTRUEになる、つまり終わりだよーって伝えて、ループを止めてくれる。

今ここで、ループしてて、

      PROCESS-LOOP.
           PERFORM READ-INFILE
             UNTIL EOF-YES.

READ-INFILEを実行、EOF-YESがTURE(真)になるまでってことだった。
AT ENDになるとEOF-YESがTRUEになって、ループが止まると。

なにかが終わってなければ、

ADD 1 TO TOT-RECORDS
PARSE-AND-VALIDATE

TOT-RECORDSが一つ増加で、PARSE-AND-VALIDATEが発動する。
PARSE-AND-VALIDATEでデュエル開始だ!

ね、完璧でしょ?でしょ?

係)何かってなんだよ。

な)えっと…なにか、ですよ?

その何かにはこの世のすべてが詰め込まれているんですよ。

そう、パンドラの箱ですよ!
なにかが終わるんですから、パンドラの箱を開いたら終わるんですよ!

係)お前この前、近くにないからわからんとか言ってたくせにな。
READ INFILEがすぐ上にあるだろが。

   READ INFILE
               AT END
                   SET EOF-YES TO TRUE
               NOT AT END
                   ADD 1 TO TOT-RECORDS
                   PERFORM PARSE-AND-VALIDATE

おむすび

結局、どこにあってもわかねーんじゃねーか

な)あ・・・。

い、いや、俺、近眼なんで、視力が0.01ぐらいなんで、近くても遠くても別に関係ないんで!

見えないんで!

係)メガネかけてるだろが。

― 目次(読みシリーズ)へ戻る ―

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次