🧩今日の学び
・SORTが動く前に必要なのは処理ではなく、FDとSDによるファイル定義
・SDは人間立入禁止の作業領域で、SORT文だけが触れる
・COBOLは「何をするか」より「何を信じてよいか」を先に決める言語
なるお)で?
係長)なにがだよ?
な)もっと説明あるんですよね?
ファイルからデータを取ってくるとか言ってますけど、ファイル指定しないといけないっすよね?そこの説明とかファイル操作とかも言ってたじゃないすかー。
係)あー、まぁそうだな。
なんで鋭くなってきてんだよ…ったく。
な)どういう悪口!?
係)素直に説明聞いて喜べよ。可愛くねーな!
な)だから、どんな悪口なの!?
SORTは勝手に動かない、先に「身元確認」がある
係)いいか、SORT文は「魔法」じゃない。
当たり前だが、勝手にどこかからデータが湧いてくるわけじゃない。
COBOLはな、処理より先に身元確認をさせる言語だからな。
「ファイル指定」、SORT 文の外側で、ちゃんと「ファイルの戸籍」を書いておくんだ。
まず、全体像をコードで見るとこうなるな。
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT-FILE
ASSIGN TO "input.csv".
SELECT OUTPUT-FILE
ASSIGN TO "output.csv".
SELECT SORT-FILE
ASSIGN TO SORT-WORK.
DATA DIVISION.
FILE SECTION.
FD INPUT-FILE.
01 INPUT-REC.
05 ITEM-ID PIC X(3).
05 ITEM-NAME PIC X(10).
FD OUTPUT-FILE.
01 OUTPUT-REC.
05 ITEM-ID PIC X(3).
05 ITEM-NAME PIC X(10).
SD SORT-FILE.
01 SORT-REC.
05 ITEM-ID PIC X(3).
05 ITEM-NAME PIC X(10).
な)あ、嫌いなやつだ。
係)俺もお前が嫌いだから大丈夫だ。
な)え!?
係)ここが今日の核心だ
な)いやいや、いま言っちゃいけない心の声が…
係)うるさいな、邪魔すんな!
な)えー!!
FDとSDは役割が違う、ファイルにも戸籍がある
係)いいか
INPUT-FILE / OUTPUT-FILE
- FD(File Description)
- 普通のファイル
- READ / WRITE される存在
SORT-FILE
SD(Sort Description)SORT専用READもWRITEもしないSORT文からしか触れない
なぜSORT-FILEだけSDなのかというと、SORT-FILEは人間が触っちゃいけない領域だからだ。
- どこにあるか知らなくていい
- 何件あるか知らなくていい
- いつ消えるかも知らなくていい
SORTが全部面倒を見る。
だからSDだ。
SORT文が裏でやっている本当の処理
SORT文が裏やってることはこうだ。
INPUT-FILEをREADする
↓SORT-FILEに一時格納
↓
キー順に整列
↓OUTPUT-FILEにWRITE
READもWRITEも書いてないだろ?でも動く。
な)だったらSORT-FILEの指定ってどこでやってんすか?全PCが繋がっていて、全PCで共有されていて、PCから脅迫されちゃう時代ってことっすか!ターミネーター4の時代っすか!?二度と見ないっすよ!
係)お、いい質問だな。
な)ですよね!そりゃ2がよすぎたんすから、3以降は蛇足になるってもんですよ!でも、審判の日が始まったところは好きですからね!
係)そっちじゃねーよ!なんの怒りなんだよ、ったく。
ファイルの指定は
- PC(GnuCOBOL)では一時ファイル
- メインフレームではJCLの世界
となる。
つまり、ここから先は「環境」の話になるからな。
な)だから嫌いなやつ!
係)知るか!
な)冷たい…。冷奴すか。でも冷奴って言うほど冷くないですよね。
係)じゃ食うなよ。
おむすび
係)まとめるぞ
- ファイルは
DIVISIONで宣言 SORT-FILEはSDで別枠SORT文はファイル定義を信じて動く- ファイル指定は「処理」じゃなく「前提」
ということだな。
な)わかったような、わかんないような、でもわかんないような。
係)つまりは、わかってないんだろ…。どこがわからないんだよ。
な)え、全部?
係)なんでだよ…
係長のワンポイント
FDは人間が触る戸籍、SDは人間立入禁止区域だ。SORT-FILEをSDにするのは、自由に触らせないための設計判断だ。READやWRITEを書かなくても動くのは、裏で全部やっているからだ。
だからSORTは「書き方」より、置き場所と前提がすべてになる。
COBOLは処理より先に、身元確認をさせる言語だ。

コメント