【COBOL学習|初心者向け】COBOLのSORT処理を安全に完結させる!OUTPUT PROCEDUREとEXIT文の正しい作法

1. なぜ「EXIT文」が必要なのか?

COBOLでSORT文を使用する際、単純にファイルをソートするだけでなく、ソートされたデータに対して「集計」や「加工」を行いたい場面は非常に多いですね。そのために使うのが「OUTPUT PROCEDURE」です。
しかし、ここには初心者の方がつまずきやすい「論理的な出口」の定義というルールがあります。プログラムの実行を正しく制御し、予期せぬループやエラーを防ぐために、この「EXIT文」を使った出口の作り方をマスターしましょう。

2. 基礎知識:OUTPUT PROCEDUREの仕組み

OUTPUT PROCEDUREは、SORT文によって並び替えられたデータを、1件ずつ取り出しながら処理する機能です。
ここで重要なのは、「プログラムの物理的な終わり」と「SORT処理の論理的な出口」は別物であるという点です。COBOLの制御フローは、何も指示がないとプログラムの末尾まで突き抜けてしまいます。そのため、「ここが処理の終わりですよ」と明示的にマークする場所、つまり「出口(EXIT)」を定義してあげる必要があるのです。

3. 実装と解決策:出口段落の作り方

解決策はシンプルです。プログラムの末尾に、処理を終了させるための専用の段落(EXIT段落)を作成し、RETURN文のループを抜けた後にそこへ飛ばす(GO TOする)という構造をとります。これにより、SORTの実行ユニットが安全に終了し、呼び出し元のプログラムへ制御が戻ります。

4. サンプルプログラム

以下のコードを参考にしてください。RETURN文でデータがなくなるまで読み込み、最後にEXIT段落へ抜けるという定石のパターンです。

000100 PROCEDURE DIVISION.
000200 — メイン処理 —
000300 SORT SORT-FILE ON ASCENDING KEY SORT-KEY
000400 OUTPUT PROCEDURE IS 100-OUTPUT-PROC.
000500 STOP RUN.
000600
000700 100-OUTPUT-PROC SECTION.
000800 — データを1件ずつ取り出すループ —
000900 PERFORM UNTIL EXIT
001000 RETURN SORT-FILE AT END EXIT PERFORM END-RETURN
001100 DISPLAY “取り出したキー: ” SORT-KEY
001200 END-PERFORM.
001300 — ここでEXIT段落へ飛ばして終了する —
001400 GO TO 200-OUTPUT-EXIT.
001500
001600 200-OUTPUT-EXIT.
001700 — SORT処理の論理的な出口を定義 —
001800 EXIT.

5. 応用と注意点:現場で役立つポイント

・「落下」に注意する
COBOLでは、段落を記述しただけでは上から下にプログラムが流れてしまいます。EXIT段落を定義しただけで満足せず、必ず「GO TO」を使って意図的にそこへ飛ばすようにしてください。
・EXIT文の活用
今回のEXIT文は、手続きの終わりを示すマーカーとして機能しています。大規模なシステムでは、この出口段落に「処理終了時のログ出力」や「集計結果の確定処理」を記述することもあります。
・構造化プログラミングの意識
最近のCOBOLでは「GO TO」を嫌う傾向もありますが、SORTのOUTPUT PROCEDUREにおける終了制御は、このパターンが最も標準的で安全です。まずはこの「定型句」として覚えてしまいましょう。

この作法を守ることで、SORT処理のバグを未然に防ぎ、読みやすいコードを維持することができます。ぜひご自身のプログラムで試してみてください。

コメント

タイトルとURLをコピーしました