🧩今日の学び
・WRITE命令を使うことで、COBOLの処理結果を画面表示だけでなくファイルへ保存できる。
・ファイル出力では、書き込むレコード構造と出力先ファイルの関係を意識する必要がある。
・COBOLは結果を表示するだけでなく、次の処理へ渡せる形でデータを残す言語だ。
なるお)いやー有頂天ですねー
係長)自分で「有頂天」言うヤツいないだろ…
な)自分はやればできる子だってことを忘れてましたよ!
係)一生忘れてろよ。
な)いやー、忘れるなんてもう無理!NO 有理!
係)うるさいっての!
じゃ、次、ファイルに書き出せ。
DISPLAYだけではデータは残らない
な)は?
だから、画面上でDISPLAYで表示するだけじゃなく、ファイルに書き込んでデータを保存しろって話だ。
な)なんでそんなことするの!?
係)データを保存するのは当たり前だろ!
な)ギャバン!
で、WRITEでしたっけ?
係)なんだ、わかってたのか。
な)なんか昔説明してましたよねー、あのとき係長有頂天でしたよねー
係)お前に説明しただけで有頂天になるかよ!
な)またまたー、で、どう使うんす?
係)なにがまたまたなんだよ……いいか、
hoshiimo 合計: 5000
こういったデータをファイルへ保存するってことだ。
な)おー!機械の世界っすね!AIの反乱っすね!今度はシュワちゃん監督のターミネータ3爆誕ですね!
係)もう3以降はいらんから…
な)なぜに!?
今度こそ成功するっていう未来に逆張りしましょうよ!あのサラ・コナーが守った未来を今度は君たちが守る番だ!バーン!Coming Someday 的な!
WRITEするためのファイルを定義する
係)いいんだよ、そんな来るはずもない未来のことは!
保存するときに使うのがWRITEになるんだよ。
まずは書き込み用ファイルを定義。
SELECT RESULT-FILE
ASSIGN TO "result.txt"
ORGANIZATION IS LINE SEQUENTIAL.
な)result.txtってファイルを使うと
係)そうだ。
そしてFDも作る。
FD RESULT-FILE. 01 RESULT-RECORD PIC X(30).
今回はとりあえず、一行文字列として書いてみるぞ。
な)ほー
OPEN OUTPUTで書き込みモードにする
係)そしてOPENだな。
今回はINPUTではなく、書き込むからOUTPUTだ。
そして値をMOVEして、WRITEするって流れだ。
そして最後は閉じる。
ってとこだ。
では、やってみろ。
な)へ!?ヒントなさすぎじゃないっすか!?ヒントに溢れた世界で生きていきたいんすよ!ヒントに溺れたいんですよ!ぶくぶくですよ!
係)ぶくぶく太ってることはわかってるから、さっさと考えろ。
な)すぐぽっちゃりにつなげるのなんなの!おうおう!やってやんよ!
・・・
・・
・
………何も思いつかない。この世は虚無。全ては無であり、無が全てであり、虚である。
カントリーマアムさえも無。この感覚こそ虚無。
係)虚無虚無うるさいから!はよやれ!
な)悟ってない人にはわからないものなのです。
係)ただ、カントリーマアム全部食っただけだろが!
な)世俗で下品な言葉が聞こえます…。
…あ!もう一個あった!
これは、もうカントリーマアムじゃないからね!ワールドワイドマアムだからね!
係)どういうことだよ…
な)んでっと
SELECT RESULT-FILE
ASSIGN TO "result.txt"
ORGANIZATION IS LINE SEQUENTIAL.
FD RESULT-FILE.
01 RESULT-RECORD PIC X(30).
とりあえず、もらったこの二つと、さっきの遺言から、前回のコードを参考にしてやってみるっぺかー。
IDENTIFICATION DIVISION.
PROGRAM-ID. NARUO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT NARUO-FILE
ASSIGN TO "naruo2.txt" ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD NARUO-FILE.
01 NARUO-RECORD.
05 SALE-DATE PIC X(10).
05 ITEM-NAME PIC X(20).
05 AMOUNT PIC 9(5).
WORKING-STORAGE SECTION.
01 EOF-FLAG PIC X VALUE "N".
01 INPUT-NAME PIC X(20).
01 SEARCH-NAME PIC X(20) VALUE " ".
01 TOTAL-AMOUNT PIC 9(7) VALUE 0.
PROCEDURE DIVISION.
OPEN INPUT NARUO-FILE.
DISPLAY "ENTER".
ACCEPT INPUT-NAME.
MOVE INPUT-NAME TO SEARCH-NAME.
PERFORM UNTIL EOF-FLAG = "Y"
READ NARUO-FILE
AT END
MOVE "Y" TO EOF-FLAG
DISPLAY "SEKAI NO OWARI"
NOT AT END
IF ITEM-NAME = SEARCH-NAME
ADD AMOUNT TO TOTAL-AMOUNT
END-IF
END-READ
END-PERFORM.
DISPLAY "TOTAL: " TOTAL-AMOUNT.
CLOSE NARUO-FILE.
STOP RUN.
係)誰の遺言だよ!
WRITEはDISPLAYの保存版である
な)まずはOPENのとこ!OUTPUTにするだけだから簡単たん!
OPEN OUTPUT RESULT-FILE.
そしてMOVE…って、なにをMOVE?
係)そこは適当な文言でいいぞ。今回は書き込むことを体感するだけだからな。
な)ほむ
だったら、偉人を称賛して、それをMOVEして…っと
MOVE "Excellent Naruo" TO RESULT-RECORD.
係)誰が偉人なんだよ…
な)で、これをWRITEしたいんだから、多分こんな感じでしょ、こぼるん単純だし
WRITE RESULT-RECORD.
んで閉じる
CLOSE RESULT-FILE.
こんなんでどうです?
係)検討が終わったんなら、形にしてみろ。
な)ほいさー
一応、RESULT-RECORDをDISPLAYして、内容が確認できるようにしておこうかな。
1IDENTIFICATION DIVISION. 2PROGRAM-ID. NARUO. 3 4ENVIRONMENT DIVISION. 5INPUT-OUTPUT SECTION. 6FILE-CONTROL. 7 SELECT RESULT-FILE 8 ASSIGN TO "result.txt" ORGANIZATION IS LINE SEQUENTIAL. 9 10DATA DIVISION. 11FILE SECTION. 12 13FD RESULT-FILE. 1401 RESULT-RECORD PIC X(30). 15 16PROCEDURE DIVISION. 17OPEN OUTPUT RESULT-FILE. 18 19MOVE "Excellent Naruo" TO RESULT-RECORD. 20DISPLAY RESULT-RECORD. 21 22WRITE RESULT-RECORD. 23 24CLOSE RESULT-FILE. 25STOP RUN.
こんな感じでうっとりGO!
Excellent Naruo
result.txtは自動で作られる
ターミナルに表示されて、うっとりできるけど…ファイルはどうなったのかしら?
うほ!なんか同じフォルダの中に勝手にできてる!?うっとりイリュージョニスト!
係)すでに同名ファイルがある場合は、内容が上書きされるから、気をつけろよ。
な)ほむ。そして、ファイルの中身を見てみましょう!
書き込まれてるぅ!!もうこれ「うっとりスト」誕生でしょこれ!
おむすび
係)うっとりうっとりうるさいっての。
な)……あなたには、新たに生まれたうっとりの息吹を感じないのでしょうか。
係)普通のことだろが!
な)嘆かわしい…
係)ほら次行くぞ。
な)今この瞬間の感動を感じることができないとは、まことに嘆かわしい…
係)お前が嘆かわしいわ!
な)そのような悪態をついてしまうことこそが嘆かわしい…
係)もういいっての!
係長のワンポイント
WRITEは「表示する命令」ではない。
処理結果をファイルとして残すための命令だ。
よくある誤解はDISPLAYと同じ感覚で考えることだが、DISPLAYは消え、WRITEは残る。
だから先にレコードへ値をMOVEし、そのレコードをWRITEする必要がある。
その結果、計算結果や集計結果を次の処理でも利用できるようになる。
COBOLはその場で見せる言語ではなく、データを残してつなげる言語だ。




コメント