【COBOL 読み1-8】光の速度よりも〜OPENしてPERFORMして、で?〜

今日のコード

   OPEN INPUT INFILE
       OUTPUT OUTREP
       OUTPUT ERRFILE.

   PERFORM WRITE-REPORT-HEADER.
目次

星矢は光の速度

なるお)INFILEにはファイルをいれてるからー

あれ?FDってなんだったっけ??
ファイナルディメンションだっけ?

聖闘士星矢だっけ?
絶対ペガサス流星拳のほうが手数多いから痛いと思うんだけど、ペガサス彗星拳のほうが痛いってなかなか味わい深いよ。うんうん。

係長)お前覚える気無いだろ。

な)いや、十二分にありますよ。

でも、もう十三分目なんで、なかなかー。
富士山10合目まで行って、ようし11合目目指すぞー!って天国行っちゃいますよ。

係)じゃもう教えても仕方がないってことだな。

な)いやいや、ジョークを理解する気持ちを忘れちゃだめですって。

一日一回ジョーク言わないと顔怖くなりますよ。もともと顔怖いんですから。

人生つまらなくても笑顔は大切ですよ!

係)俺がお前を嫌いになるのは一瞬だからな?光の速度より速いからな?

な)はい…すみません⋯(顔も冗談こわい…)

FDと01、ファイルを開くその前に

       DATA DIVISION.
       FILE SECTION.

       FD  INFILE.
       01  IN-REC  PIC X(512).

係)FDはここだな。

FD  INFILE.

これはプログラム内で使うファイルのラベル(識別子)」をFDで定義したと

01  IN-REC  PIC X(512).

ここでIN-RECっていう512バイトの箱を作ったわけだが、FDの下に書いてあるから、INFILEから読み込む1行分(=1レコード)がここに入るんだ。

  OPEN INPUT INFILE

そのラベル(INFILE)を入力用ファイルとして開くという流れになる。

さらに

OPEN INPUT INFILE

そのラベル(INFILE)を入力用ファイルとして開け、という命令。

OUTPUT OUTREP

出力用にOUTREPファイルを開く(なければ新規作成、あれば上書き)

OUTPUT ERRFILE.

エラー出力用に開く。

というところでドットが入ってOPEN文が終わりだ。

な)でもー「FILE SECTION」じゃないと「01 FD.」とか書けないんすか?

離れた場所に書いちゃうからうっかり忘れちゃうんじゃないですかー、設計者のせいじゃないですかー。

クレーム入れましょ!ハードクレーム入れときましょ!もちろん係長から!

係)COBOLは DIVISION → SECTION → FDや01定義 って階層が決まってんだ。
だから FD は必ず DATA DIVISION の FILE SECTION の中にしか書けねーんだよ。

な)えー、だったらクレーム入れられないじゃないですかー。

係)お前が外回りをしたら、クレーム祭りになるから大丈夫だ。

な)はっ!?俺、外回りとかいかないっすから…行くなら、係長一緒にね!行きましょうね!ね!

係)しらねーよ、お前の仕事だろ。

な)いやーだー!!
可愛い子には旅をさせちゃダメなんすよ!自宅に監禁してくださいって!あ、でもコンビニにアイスは買いに行きたいので、そこら辺は自由にしてもらって。

係)知るか!別に可愛くねーよ!

な)好きな子には意地悪したくなるってやつっすね。掌返しっすね。

あれ?
じゃ、手元で「OPEN」って書くときに「あれ?FD定義したよね、多分おそらくメイビー」て思い込んだりしたら、一途な俺はあの娘にぞっこん!どころの騒ぎじゃないじゃないですか!

係)アウトだよ。コンパイルエラーで即バレる。
「そんなファイルねーよ」ってコンパイラに怒られる。
いや違うか、コンパイラ「にも」怒られるだな。

な)うはー!ド不親切!

係)COBOLは親切じゃなくて、「お前が全部責任持て」の世界だからな。

な)なんすかその「COBOL使いたいんだろ、だったら使わせてやるよ!でも何があっても俺に言ってくるんじゃねーぞ!絶対だぞ!なにか行ってきてもしらねーからな!間違っていても、いなくても、動かなかったらお前の責任、お前が足短いのが悪いんだからな!!!」の世界は!身体的特徴をいじるなんてひどい!

係)何一人で言ってんだ。

な)俺だって好きで足短くないんすよ!

PERFORM ― COBOLの“段落呼び出し”ってなんだ?

そんでそんで、

PERFORM WRITE-REPORT-HEADER

って一切合切わからないんですけど?

係)COBOLは「PERFORM 〇〇」って書いたら、その〇〇って名前の段落(ラベル)に処理を飛ばして実行するわけだ。

だから

「これからレポートのヘッダを書き込む処理をやってこい」

って言ってるだけだ。

な)やってこいってなにを?って話ですよー

係)だから最後まできけ。

COBOLは 先に呼び出してから、中身が後で出てくる ことが普通にある。
Pythonみたいに「関数定義が前にないと動かない!」とかじゃねぇんだ。

な)えー!だったら、今日の気分はポジティブシンキングだから、前に書こう!とか、いつまでも嘘陽キャを続けられないよって、ネガティブシンキングよろしく後ろ目の方に書くとかできちゃうじゃないですか!?

係)それが「段落(Paragraph)」って仕組みだ。
COBOLは「プログラム全体を論文みたいに書く」って設計思想だから、必ずしも上から下に順番通りじゃなくてもいい。

PERFORM で呼ばれたら、そこまで飛んでって、終わったら帰ってくるんだよ。

まぁ関数っぽいけど、戻り値も引数もない。
ただ「書いてある処理を走らせる」だけだから「WRITE-REPORT-HEADER」って名前見ただけで「ヘッダ出力する」って察しろ。

おむすび

な)察しろって、俺、そこまで気が利くタイプじゃないです…

係)それはお前の体型見ればわかるわ。

な)それデブっていってます??

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

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

この記事を書いた人

コメント

コメントする

目次