【COBOL学習|実務向け】ソート処理を極める:OUTPUT PROCEDUREにおけるRETURN文の正しい使い方

導入:なぜ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の結果セット専用」と覚えておきましょう。

この構成を意識するだけで、複雑なソート処理もメンテナンス性の高いものに変わります。ぜひ、実務のコードベースで活用してみてください。

コメント

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