【COBOL 書き1-10-1】WRITEでファイルに書き出そう!〜うっとりの嘆き

🧩今日の学び
WRITE命令を使うことで、COBOLの処理結果を画面表示だけでなくファイルへ保存できる。
・ファイル出力では、書き込むレコード構造と出力先ファイルの関係を意識する必要がある。
・COBOLは結果を表示するだけでなく、次の処理へ渡せる形でデータを残す言語だ。

なるお)いやー有頂天ですねー

係長)自分で「有頂天」言うヤツいないだろ…

な)自分はやればできる子だってことを忘れてましたよ!

係)一生忘れてろよ。

な)いやー、忘れるなんてもう無理!NO 有理!

係)うるさいっての!

じゃ、次、ファイルに書き出せ。

DISPLAYだけではデータは残らない

な)は?

だから、画面上でDISPLAYで表示するだけじゃなく、ファイルに書き込んでデータを保存しろって話だ。

な)なんでそんなことするの!?

係)データを保存するのは当たり前だろ!

な)ギャバン!

で、WRITEでしたっけ?

係)なんだ、わかってたのか。

な)なんか昔説明してましたよねー、あのとき係長有頂天でしたよねー

係)お前に説明しただけで有頂天になるかよ!

な)またまたー、で、どう使うんす?

係)なにがまたまたなんだよ……いいか、

💻 ターミナル出力 実行結果
hoshiimo 合計: 5000

こういったデータをファイルへ保存するってことだ。

な)おー!機械の世界っすね!AIの反乱っすね!今度はシュワちゃん監督のターミネータ3爆誕ですね!

係)もう3以降はいらんから…

な)なぜに!?

今度こそ成功するっていう未来に逆張りしましょうよ!あのサラ・コナーが守った未来を今度は君たちが守る番だ!バーン!Coming Someday 的な!

WRITEするためのファイルを定義する

係)いいんだよ、そんな来るはずもない未来のことは!

保存するときに使うのがWRITEになるんだよ。

まずは書き込み用ファイルを定義。

📝 COBOL sample.cob
SELECT RESULT-FILE
    ASSIGN TO "result.txt"
    ORGANIZATION IS LINE SEQUENTIAL.

な)result.txtってファイルを使うと

係)そうだ。

そしてFDも作る。

📝 COBOL sample.cob
FD RESULT-FILE.

01 RESULT-RECORD PIC X(30).

今回はとりあえず、一行文字列として書いてみるぞ。

な)ほー

OPEN OUTPUTで書き込みモードにする

係)そしてOPENだな。

今回はINPUTではなく、書き込むからOUTPUTだ。

そして値をMOVEして、WRITEするって流れだ。

そして最後は閉じる。

ってとこだ。

では、やってみろ。

な)へ!?ヒントなさすぎじゃないっすか!?ヒントに溢れた世界で生きていきたいんすよ!ヒントに溺れたいんですよ!ぶくぶくですよ!

係)ぶくぶく太ってることはわかってるから、さっさと考えろ。

な)すぐぽっちゃりにつなげるのなんなの!おうおう!やってやんよ!

・・・
・・

………何も思いつかない。この世は虚無。全ては無であり、無が全てであり、虚である。

カントリーマアムさえも無。この感覚こそ虚無。

係)虚無虚無うるさいから!はよやれ!

な)悟ってない人にはわからないものなのです。

係)ただ、カントリーマアム全部食っただけだろが!

な)世俗で下品な言葉が聞こえます…。

…あ!もう一個あった!

これは、もうカントリーマアムじゃないからね!ワールドワイドマアムだからね!

係)どういうことだよ…

な)んでっと

📝 COBOL 検討中
SELECT RESULT-FILE
    ASSIGN TO "result.txt"
    ORGANIZATION IS LINE SEQUENTIAL.

FD RESULT-FILE.
01 RESULT-RECORD PIC X(30).

とりあえず、もらったこの二つと、さっきの遺言から、前回のコードを参考にしてやってみるっぺかー。

📝 COBOL 前回のコード
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にするだけだから簡単たん!

📝 COBOL 検討中
OPEN OUTPUT RESULT-FILE.

そしてMOVE…って、なにをMOVE

係)そこは適当な文言でいいぞ。今回は書き込むことを体感するだけだからな。

な)ほむ

だったら、偉人を称賛して、それをMOVEして…っと

📝 COBOL 検討中
MOVE "Excellent Naruo" TO RESULT-RECORD.

係)誰が偉人なんだよ…

な)で、これをWRITEしたいんだから、多分こんな感じでしょ、こぼるん単純だし

📝 COBOL 検討中
WRITE RESULT-RECORD.

んで閉じる

📝 COBOL 検討中
CLOSE RESULT-FILE.

こんなんでどうです?

係)検討が終わったんなら、形にしてみろ。

な)ほいさー

一応、RESULT-RECORDDISPLAYして、内容が確認できるようにしておこうかな。

📝 COBOL write.cob
  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はその場で見せる言語ではなく、データを残してつなげる言語だ。

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

この記事を書いた人

コメント

コメントする

CAPTCHA