🧩今日の学び
・SORTはファイルを並べ替える命令ではなく、後続処理の前提条件を作る命令
・元ファイルを触らず、一時整列と責任範囲を分離するのがCOBOL流
・SEARCH ALLが成立する保証は、SORTという入口設計で作られる
係長)ま、SEARCHについてはここらでいいだろ。
なるお)ここらでって単位がおかしくないです?何時間喋ってんすか!声枯れないんすか。やっぱり戦中育ちは強いっすね…
係)誰が戦中育ちだよ!
ま、俺は満足できたから、いいけどな。
な)ただの係長ショーじゃないっすか!
係)うるさいんだよ。お前も死ぬ前に思い出すって。なんて素晴らしい弁舌だったんだとな。
な)もう忘れてますよ…(ボソ
係)テストするからな。
な)は!?何言いました今?てすととか言いっちゃいました!?コンピューターなんてものは所詮道具なんすよ!人間は経験が物を言うんすよ!一時の記憶なんて当てにならないっすよ!テストなんて管理社会の弊害ですからね!そんな風潮に流されちゃいけません!世間なんて嘘ばっかりですから!目を覚まして!
係)お前が目を覚ませよ。忘れた頃に試験だから大丈夫だ。
な)それ一番性格悪いやつ!どこに大丈夫の要素があるんすかって…
いやまぁ係長の性格の悪さは世界トップクラスなのは理解してますけど…
係)うるせーな!
今ので絶対やるって決めたからな!赤点設定してやるからな!覚悟しとけ!
な)にっくき米兵!とか言って竹槍ついてた時代じゃないんすよ…もうとっくに種子島に火縄銃きてますからね…
係)だからうるさいって!
で、今日はSORTと「ファイル操作」にいくぞ。
な)ふわーい…
SORTは「ファイルを並べ替える命令」ではなく「一時整列して渡す」だけ
係)まず前提をひっくり返すぞ。
勘違いしてる人が多いが、SORTはファイルを並べ替える命令じゃない。
な)ほえ?
係)「一時的に並べて、次に渡す」命令だ。
お前のようにExcelだけで仕事してるふうに見せてるやつは、
- ファイルを開く
- 並べ替える
- 保存する
と、どうせSORTをこう思っているだろ。
な)なんで悪口…
係)COBOLのSORTは
- 入力ファイルを読む
- 一時領域で並べる
- 出力ファイルに書く
元ファイルは触らない。
な)ふみふみ。
SORT文は4要素でできている
これがSORT文の最小構成だ。
SORT SORT-FILE
ON ASCENDING KEY ITEM-ID
USING INPUT-FILE
GIVING OUTPUT-FILE
1行ずつ意味を解体してくぞ。
① SORT-FILE
並べ替え専用の作業用ファイル
- 実ファイルじゃない
- プログラム内部で使う「作業台」
② ON ASCENDING KEY ITEM-ID
何を基準に、どう並べるか
ASCENDING(昇順)DESCENDING(降順)SEARCH ALLの保証はここで作る
③ USING INPUT-FILE
どこからデータを取ってくるか
READを自分で書かなくていいSORTが勝手に読む
④ GIVING OUTPUT-FILE
並んだ結果をどこに吐くか
- ここで初めて「並んだファイル」ができる
SEARCH ALLはこの後
SORTはREADを含んでいるという罠
重要なのは、SORTは「処理」じゃない
つまり、READ → SORT → SEARCHではなく、SORT自体がREADを含んでいるってことだ。
だから実務ではこうなる。
PERFORM SORT-ITEM-FILE
PERFORM SEARCH-ALL-ITEM
お前の考えていることを先読みするぞ。
一つ。元ファイルが並び替えられたと思っていただろ。
別に、並んでないからな。
二つ。SORTの後にUSINGのファイルを読むって思っていただろ。
別に、意味ないからな。
三つ。SORTをIFの中に書く
それ,地獄確定だからな。
な)いや、あの、全部思ってないっすけど…。
係)思えよ!
な)理不尽!?
おむすび
係)まとめるぞ。
- SORT は「一時整列」
- 元ファイルは汚さない
- SEARCH ALL の前提は SORT で作る
- SORT は「処理の入口」に置く
ということだな。
わかったな?
な)へ?いやわかったなじゃないですよ!またドヤ顔して気持ちよくなってないっすか?全然説明になってないっすよ!
係)うるさいな。ここで終わるわけ無いだろ!
な)え?
係)ここから言いたいことを言っていくわけだからな。
な)いやー!また始まるぅ!!
係長のワンポイント
SORTは結果を作る命令じゃない。
後続処理が信じて動ける“並び”を用意する命令だ。
元ファイルを触らないのは、責任範囲を限定するためでもある。
だからSORTは途中に置くと壊れるし、入口に置くと意味を持つ。SORTは処理じゃない──前提条件だ。

コメント