🧩今日の学び
・WRITEは「行=レコード」を物理紙へ叩きつける“印字儀式”であり、原初COBOLの象徴
・STRING→OUT-REC→WRITEの流れは帳票時代から続く「1行生成→吐き出し」文化
・紙が動くAFTER ADVANCINGの思想を知ると、現代出力処理の基礎がスッと腹に落ちる
今日のコード
FINISH.
*> サマリ出力
MOVE " " TO OUT-REC
WRITE OUT-REC.
MOVE "SUMMARY:" TO OUT-REC
WRITE OUT-REC.
MOVE SUM-NET TO E-SUM-NET
MOVE SUM-TAX TO E-SUM-TAX
MOVE SUM-GROSS TO E-SUM-GROSS
STRING
"TOTAL RECORDS=" DELIMITED BY SIZE
TOT-RECORDS DELIMITED BY SIZE
" OK=" DELIMITED BY SIZE
TOT-OK DELIMITED BY SIZE
" ERR=" DELIMITED BY SIZE
TOT-ERR DELIMITED BY SIZE
INTO OUT-REC
END-STRING
WRITE OUT-REC.
なるお)もうなんか大体同じようになるんだねぇ。
MOVEまつり、STRINGまつり、DELIMITEDまつり、BYやALLまつりと。
係長)ほう、意外と理解してたのか。
な)人間てものは成長するものですよ。この私を見ていれば、わかるでしょう。
で、WRITEってなんですか?
係長)お前、それ前回もあったじゃねーか。なんでそのとき聞かねーんだよ。
な)いやーなんとなくスルーしてましたんで。
係)なんでスルーすんだよ、まったく。
人生の大事なとこもスルーしてそうだな。
な)えへへ!そうなんですよ〜
係)お前が照れるポイントわかんねーよ。
ったく、さて、改めてちゃんとやるぞ。
WRITEの本質:1行を吐き出すCOBOLの儀式
係)「WRITE」はファイルや出力装置に、1行(1レコード)を書き出す命令だ
COBOLの世界観で言うと COBOLは「ファイル=行の集合」って考え方で、 各行(レコード)は FD(File Description)で定義してある構造をもとに、INFILE から READ して、OUTFILE に WRITE していく。
たとえば、今のこの行
WRITE OUT-REC.
これで「OUT-REC という作業領域の中身を、出力ファイル(または画面)に1行分書き込め」って意味になる。
つまり
1. STRING … INTO OUT-REC で文字列を組み立てる
2. WRITE OUT-REC. でその1行を吐き出す
この2段構えが COBOL の「出力の基本形」なんだ。
COBOL=紙文化:連続用紙と帳票プリンタの世界
な)え、てことは出力、プリントアウトまで含めちゃうってわけなんすか。
古いでかい紙でどっちゃんどっちゃんと印刷されていくって感じですかね。
時代を感じるでっかいプリンタで。
あんなでかいプリンタ、アメリカがでかいことの自慢ですよね。
HAHAHA!ジャパン狭い醤油臭充満!HAHAHA!ってひどいですよね!こっちは醤油こぼしてYシャツの茶色のシミがとれないのに!まだ着ますからね!見ててくださいよ!
係)そうかそうか。
な)いや、醤油…
係)帳票プリンタってやつがあって、幅広の 連続用紙 に、1行ずつガシャンガシャン打ち出してた。
1レコード=1行分の印刷内容。
WRITE OUT-REC は「1行分の帳票を印字する」って意味なんだ。
改行じゃない、紙が動く:AFTER ADVANCING の衝撃
な)プリントアウトー!とかしないんですか…
係)COBOLが生まれた1959年当時、「画面出力」なんてものはまだ存在しないんだよ。
だから WRITE=印刷 だったんだよ。
WRITE OUT-REC AFTER ADVANCING 1 LINE とか書くと、「1行送りしてから印字」。
AFTER ADVANCING PAGE なら、「用紙送り(改ページ)」まで実際にやってた。
つまり「改行」じゃなくて、紙が物理的に動く。
な)いやー……
COBOLって本当に紙が前提のプログラミング言語だったんすね。
係)ああ。
「1行書く」=「紙に打つ」
「ファイルを閉じる」=「プリンタ止める」
「EOF」=「紙切れ」
そんな時代の言語ってことだ。
おむすび
な)なんか……レガシーっていうより、戦国浪漫美少女武士って感じですかね!
係)ほんとに何いってんだ、お前?
な)でも、その時代の人たち、「バグ出たらプリンタの紙全部見直してた」とか地獄少女すぎません?
いっぺん死んでみる?的な。
係)……現場ではな、紙に出すのがデバッグだったんだよ。
お前もいっぺん、ドットインパクトプリンタでログ出してみろ。
な)あれ?ちょっと地獄少女、気に入りました!?
係)何がだよ!
係長のワンポイント
WRITE は「1レコード=1行」を紙に物理的に打ち出す命令だ。
FILE=行の集合というCOBOLの世界観では、WRITE は“印字の儀式”そのもの。
AFTER ADVANCING は改行ではなく“紙を送る”という物理動作を指定している。
OUT-REC に組んだ1行を、そのまま帳票として吐くのが古代COBOLの正しい姿だ。
画面が当たり前の今でも、WRITE=“行単位の出力”として設計思想は生きている。

コメント