🧩今日の学び
・COBOLのSORTでは、普通のFDではなくSORT専用のSDを使って並べ替え用ファイルを定義する。
・SORT文は、キー項目と昇順・降順を指定するだけでなく、USINGで元データ、GIVINGで出力先を指定する必要がある。
・SORTは単なる並べ替え命令ではなく、データをどこから受け取り、どこへ渡すかを設計する処理である。
係長)もうSORTはやっただろ。だからやってみろ。
なるお)覚えていると思ってたら大間違いですよ!
係)なんで言い張るんだよ!
な)言い張らなくても怒るくせに…
係)そらそうだろが!
な)まったく困ったちゃんなんだから
係)お前が言うな!
な)つか、もっかいSORT教えてつかーさい…
係)お前ね…
これは前回やったときに説明したろ?
な)そうなんすね?
係)だからなんでそうなるんだよ!
な)ほ、ほら、基本係長が気持ちよく説明するのは邪魔しないほうがいいじゃないすか!
係)どういうことだよ!
な)もっかい、ちゃんと教えてくださいってことっす!
係)はぁ…
な)よ!係長!よ!
係)どんなノリなんだよ!
SORT専用ファイルはSDで定義する
係)いいか、まず最初のSORTの形からだ。
な)ってことは、SORT NARUO-FILEみたいなこと?
係)ファイルそのものを並べ替えてどーする。
SORTで並べ替えるのは、普通のファイルではなく、SORT専用のファイルを作ることなんだよ。
な)ほー
係)それによって、データを並べ替えてくれるんだ。
まず、SORT用のファイルを用意(定義)することから始まる。どうする?
な)まずはカツ丼あたりを出前して、係長に勝つみたいな?
係)ふざけないでやれ!!
な)ひっ!
え、えと、FDとか?
係)違う。それだとFILEなだけだ。ファイルを読み込むからFDだったろ。SORT専用になるんだぞ?
な)あ、ソート(SORT)だからSDすか?
係)そうだ。まず宣言してみろ。
な)えと…こFDがんな感じだから、
FD NARUO-FILE.
01 NARUO-RECORD.
05 SALE-DATE PIC X(10).
05 ITEM-NAME PIC X(20).
05 AMOUNT PIC 9(5).
こんなんで?
SD SORT-FILE. 01 SORT-RECORD. 05 SALE-DATE PIC X(10). 05 ITEM-NAME PIC X(20). 05 AMOUNT PIC 9(5).
FDとSDは役割も変数名も分ける
係)同じ変数名使ってどーするんだよ?
な)ふみみ
係)FDも必要なんだ。SDとあわせてもっと分かりやすい名前にしてみろ。
な)あい…
FD NARUO-FILE.
01 NARUO-RECORD.
05 INPUT-SALE-DATE PIC X(10).
05 INPUT-ITEM-NAME PIC X(20).
05 INPUT-AMOUNT PIC 9(5).
SD SORT-FILE. 01 SORT-RECORD. 05 SORT-SALE-DATE PIC X(10). 05 SORT-ITEM-NAME PIC X(20). 05 SORT-AMOUNT PIC 9(5).
こんなんでどうでげしょ…
係)…ま、いいだろ。
な)やた!
SORT文で並べ替え条件を指定する
係)次は、PROCEDURE部で、ソートをさせるわけだが、そのままだ。
SORT SORT-FILE
そして次は、何を基準に並べるってところになる。
な)SORT-AMOUNTっすよね。
係)そうだ。それを昇順か降順かということになる。
今回はON ASCENDING KEY SORT-AMOUNTでいいだろ。
昇順ASCENDING/降順DESCENDINGだ。
な)おぉ!
係)ここまででこうなる
SORT SORT-FILE
ON ASCENDING KEY SORT-AMOUNT
な)ふむふむ。これでソートされるってわけっすか?
係)違う。
な)ほえ?
係)いまの時点ではSORTファイルは空のままだ。
だからデータを流し込む必要があるんだよ。
な)SORT SORT-FILEで全部やってくれるんじゃないすか?
係)それだと苦労のしがいがないだろ。
な)苦労のしがいってなに…
USINGで並べ替える元データを指定する
係)ここからどのファイルを使って並べ替えるかと指定する必要がある。
な)…あ!FDのNARUO-FILEってこと!?
係)ビンゴだ。
な)…
係)なんだよ?
な)やっぱ係長おじさんなんだなって。
係)何がだよ?
な)ビンゴォォォ!って…うぷぷぷ
係)う、うるさいな!語尾伸ばしてないだろが!
そのNARUO-FILEを使うぞってUSING NARUO-FILEを書く。
SORT SORT-FILE
ON ASCENDING KEY SORT-AMOUNT
USING NARUO-FILE
くそ!なんなんだよNARUO-FILEって!
な)係長、顔赤いっすよ うぷぷぷ
係)だからうるさいってんだよ!
な)これで並び替え完了す?
GIVINGで並べ替えた結果を受け取る
係)まだだ。
な)えー
係)並び替えたデータはどこに行った?チーズじゃないぞ!
な)そらそうでしょ…
係)うぐっ!
ま、前にチーズはどこへとか言ってただろ!
な)何言ってんすか?お疲れですか?追い込みかけてたら自分が追い込まれたとか?
係)なんでだよ!
いいか、いまの状況ではSORT-FILEの中にあるんだよ!
な)ほーほー、あ!だからそのデータを渡さないといけないってこと?
係)そうだよ!
な)な、なんすか…
係)ハァハァ…疲れる…。
GIVING OUTPUT-FILEという形で渡すんだよ。
SORT SORT-FILE
ON ASCENDING KEY SORT-AMOUNT
USING NARUO-FILE
GIVING OUTPUT-FILE.
な)ほえー、読んで(USING)、渡す(GIVING)わけっすね。
………てか、なんか係長今日おかしいっすよ?
おむすび
係)う、うるさい!お前がふざけないから調子が出ないんだよ!
な)はぁ!?だって、係長がふざけるなって言ったんじゃないすか!
係)う、うるさいな!それでもふざけてイライラさせるのがお前だろーが!
な)どーいう意味!?
係)そもそも、お前は食欲とおふざけだけで出来てるだろが!
な)そうですけど!?
係)あ・・・そ・・・帰りたくなってきた・・・
な)あ、オレも早退しますー!
係)ふざけんな!
な)なんで!?
(次へ続く)
係長のワンポイント
SORTは「並べ替えろ」と命令するだけでは終わらない。
本当は、データをどこから受け取り、どこへ渡すかを設計する仕組みだ。
よくある誤解は SORT SORT-FILE だけで完了すると思うことだが、それでは並べ替えるデータが存在しない。
だからSD・USING・GIVINGを組み合わせて、データの入口と出口を明確にする必要がある。
その結果、並び替えは「処理」ではなく、「データの流れ」として完成する。
COBOLは命令を並べる言語ではなく、データの流れを設計する言語だ。


コメント