導入:なぜRETURN文が重要なのか
COBOLでのソート処理において、単にファイルを並び替えるだけでなく、ソートされたデータに対して「集計」「編集」「特定の条件での抽出」といった加工を行いたい場面は非常に多いはずです。その際、SORT文のOUTPUT PROCEDURE内で使用するRETURN文は、処理の要となります。通常のREAD文と混同しがちですが、これらを適切に使い分けることで、効率的かつバグの少ない構造化プログラムを実現できます。
基礎知識:RETURN文とREAD文の違い
まず、基本的な概念を整理しましょう。
READ文は、物理的なディスク上のファイルからレコードを読み込むための命令です。
一方、RETURN文は、SORT機能によって並び替えが完了した「ワークファイル(ソート結果セット)」から、レコードを1件ずつ取り出すための命令です。
OUTPUT PROCEDUREは、ソートが完了した直後に制御が渡される場所です。ここでの読み込み操作は、物理ファイルではなく、メモリ上または一時的に作成されたソート済みワークファイルに対して行われるため、必ずRETURN文を使用する必要があります。
実装:OUTPUT PROCEDUREの流れ
1. SORT文のOUTPUT PROCEDURE句でプロシージャ名を指定します。
2. 指定した段落内で、RETURN文をPERFORM文等でループさせます。
3. AT END句を使って、すべてのレコードを読み終えたかどうかの判定を行い、ループを終了させます。
サンプルプログラム:ソート結果の取り出し
以下は、売上データを金額順にソートし、結果を順次処理する実用的なサンプルコードです。
PROCEDURE DIVISION.
SORT-PROCESS.
SORT WORK-FILE ON DESCENDING KEY WS-AMOUNT
OUTPUT PROCEDURE IS PROCESS-SORTED-DATA.
STOP RUN.
PROCESS-SORTED-DATA.
- ソート済みワークファイルから1件ずつ取り出すループ
PERFORM UNTIL EXIT
RETURN WORK-FILE INTO OUT-REC
AT END
EXIT PERFORM
END-RETURN
- ここで取り出したレコードに対して編集や計算を行う
DISPLAY “金額: ” OUT-AMOUNT
END-PERFORM.
応用・注意点:現場でのトラブル回避
現場でよく遭遇するミスとして、RETURN文の書き忘れによる無限ループや、SORT文の実行前に誤って物理ファイルをREADしようとしてしまうケースがあります。
特に注意すべき点は以下の2点です。
1. INTO句の活用:RETURN文にINTO句を指定することで、ソート用ワークファイルのレコード形式から、出力用のレコード領域へ直接データを転送できます。これにより、MOVE文を介す手間が省け、コードの可読性が向上します。
2. 終了判定の徹底:AT END句は必ず記述してください。これを忘れると処理が終了せず、システムハングアップの原因となります。また、OUTPUT PROCEDURE内では、SORT対象のファイルに対してREAD文を発行してはいけません。あくまで「RETURNはSORTの結果セット専用」と覚えておきましょう。
この構成を意識するだけで、複雑なソート処理もメンテナンス性の高いものに変わります。ぜひ、実務のコードベースで活用してみてください。

コメント