【COBOL 書き1-9-2】OPEN, READ, CLOSEで状態を操作して、データを取り出す準備だ(検討編その2)

🧩今日の学び
READは単なる読み込みではなく「状態(位置とデータ)を進めて取得する命令」である
OPENREADCLOSEはそれぞれ「使える状態にする/次へ進める/終了する」という状態操作として理解できる
・手入力(ACCEPT)と構造は同じであり、入力元が変わるだけで設計の考え方は変わらない

なるお)んで、ここまでは、わかったとしましょう。ええ、しましょう。

係長)なんで理解が仮定になるんだよ。

な)しかしですよ、犯沢さん、いや犯人さん。

係)いきなり犯人扱いすんな。

な)係長こー言ってましたけど、

コードの流れ
OPEN
↓
READ(ループ)
↓
CLOSE

OPENやらREADやらCLOSEやら使い方しらないですから!あっはー!

係)笑ってんじゃねーよ!

ったく、だったら説明からいくぞ。

な)よろシュークリーム!

係)……いいか、まず前提を捨てろ。

な)え、なにをです?ほら、俺パッシブミニマリストですから。前提どころかCOBOLの知識も自然に捨てられちゃうんですよ。

係)お前の脳の小ささが問題だな。

な)いやん

OPEN・READ・CLOSEの本当の意味

係)まずだ、「READ=読む」って思ってるだろ。

な)そりゃそーでしょ。係長の荒みまくった過去を読むもREADでしょ?

係)荒みまくったってなんだよ!

そうじゃなくて、こいつらはただの英語じゃなく、「状態を操作する命令」ということだ。

な)状態…?また小難しいことを…

係)うるさい。

まずOPENだ。

な)開く、ですわね。

係)違う。

な)えー

係)正確にはこうだ。

「このファイルを使います」と宣言することだ。

な)??

係)このファイルを使える状態にするってことだ。

な)ふむふむ

係)次にREADはどうだ?

な)読む?

係)だから違うって言ってんだろ!

な)えー

係)これは「次の1件を取り出して、変数に入れる」だ。

状態とは?

な)ちょっとまってくださいよー。

状態を操作するその「状態」ってなんなんす?

係)「状態」ってのはな、難しい話ではなく、今どこを見てるか、だ。

な)どこを見てるか…?

係)このお前がデブだってことがわかること以外に役に立たないCSVがあっただろ。

naruo.csv
日付,商品名,単価
2025-12-31,干し芋,2500
2026-01-01,牛丼2つ,900
2026-01-01,カレー8人前,1500
2026-01-02,牛丼2つ,900
2026-01-03,干し芋,2500

な)ひど!

係)あのファイルの今どこ読んでるか、覚えてるやつがいる。

な)え、誰?

係)COBOLだよ。

な)こぼるん、なんて殊勝な子!!

係)OPENした時点でこうなる。

「まだ何も読んでない」

な)ほーほー

係)READするとどうなる?

な)えーと…1行目を取ってくる?

係)そうだな。その瞬間、こうなるぞ。

💡 ポイント
今見てる:1行目
変数の中:1行目のデータ

な)ほーほー。ほ?

1行目って位置情報入ってる?

係)そうだ。その状態で、もう一回READするとどうだ?

な)もしかして自動的に2行目になっちゃうなんて気を利かしちゃう?

係)そうだ。現在の状態はこういうことだ。

💡 ポイント
今見てる:2行目
変数の中:2行目のデータ

つまり状態ってのはこういうことになる。

💡 ポイント
① 今どこまで読んだか(位置)
② 今取り出してるデータ(中身)

な)READは今の状態から次に進めますっていう操作をしているってことすかね。

係)その理解でいいな。もちろん、次のデータに進めて、それを取得するってとこまででを操作しているってことだ。

な)あの箱の中でいろいろうまくこぼるんが動いてくれてるんすね。

係)そうだ。最後にCLOSEはどうだ?

な)閉じる!

係)これはほぼ合ってるな。

な)え!?

係)なんだよその「え!?」は。

な)えーと…

係)お前、流れで言っただけだろ!

な)いや、今の話の流れだと閉じるって言わないとお約束からはずれるじゃないすか。

係)なんでそんなこと考えてるんだよ…

ちゃんと言うなら「このファイルの使用を終了する」だな。

な)ふみふみ

係)まとめるとこうだ。

💡 ポイント
OPEN  → 使える状態にする
READ  → データを取り出す
CLOSE → 使用を終わる

な)ふみん

係)鈍いやつだな。READをループするということだ。

前にこんなコード書いただろ?

📝 COBOL sum.cob
  1PROCEDURE DIVISION.
  2
  3PERFORM UNTIL Y = "="
  4
  5    DISPLAY "IRERO"
  6    ACCEPT Y
  7
  8    IF Y = "="
  9        CONTINUE
 10    ELSE
 11        IF FUNCTION TEST-NUMVAL(Y) = 0
 12            MOVE FUNCTION NUMVAL(Y) TO X
 13            ADD X TO TOTAL
 14        ELSE
 15            DISPLAY "ERROR ZANEN ENTER SUJI!!" 
 16        END-IF
 17    END-IF
 18
 19END-PERFORM
 20
 21DISPLAY TOTAL.
 22STOP RUN.

ACCEPTと同じ構造だが、そのままでは書けない

な)もも?もーん?も!?

ACCEPTのところがREADになるってこと?

係)ようやく気がついたか。

な)入力方法が変わっただけで中身一緒ってこと?

係)そうだ。それが設計ってことだな。

な)んで、OPEN, READ, CLOSEはどうやって使うんす?

係)ちょっと考えてみろ。

な)む…

んー、まず、ファイルを使える状態にするってんだから、DATA DIVISIONに書くって感じかしら。

んで、READは処理をルーピングするから、PROCEDURE DIVISIONのルーピングで使えば良かったとして…

READ naruo.csvとすれば勝手にやってくれる君なのかな?

CLOSEも同じように処理終わりのところに、書いておけば良いとか?
CLOSE naruo.csvみたいに?

📝 COBOL readsum.cob(仮)
  1*>(仮)
  2DATA DIVISION.
  3WORKING-STORAGE SECTION.
  4OPEN naruo.csv.
  5
  6PROCEDURE DIVISION.
  7
  8PERFORM VARYING
  9READ naruo.csv
 10END-PERFORM.
 11
 12CLOSE naruo.csv.
 13STOP RUN.

こんな流れでどうでしょ、係長…

おむすび

係)お前簡単だと思ってただろ?まずREADが、そんな便利なわけあるかっての。

な)え…

係)COBOLはな、「データがどこにあるか」と「どこに入るか」を全部決めてやらないと動かない言語だ。

な)うわ…急にめんどくさいやつ君に。生徒会長キャラが強く出てきすぎですって

係)ま、いい、今お前が出してきた流れを使って考えていくぞ。

な)ってことは、あのコードの流れよかったんすね!これはパーティっすね!ハイクラスなパーティっすね!

係)そんなところにお前を連れていけるわけ無いだろ。

な)え!?

(次へ続く)

係長のワンポイント

READ「読む」命令じゃない。
ファイルの位置を進めて、データを取り出す“状態操作”だ。
OPENで使える状態にし、READで次へ進み、CLOSEで終了する。
だからファイルは“データの箱”ではなく、“流れる状態”として扱う。
その結果、処理は値ではなく「どこを見ているか」で決まる。
COBOLはデータではなく、状態の流れを制御する言語だ。

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

この記事を書いた人

コメント

コメントする

CAPTCHA