【COBOL学習|初心者向け】COBOLの可変長配列「OCCURS DEPENDING ON」を使いこなそう!

1. 導入:なぜ「可変長配列」が必要なのか?

COBOLでデータを扱う際、固定長(決まった長さ)の配列だけでは対応できないケースが多々あります。例えば、「顧客1人あたりの注文数がバラバラである」「月によってデータの件数が変わる」といった場合です。
すべての配列を最大数で確保するとメモリの無駄遣いになり、かといって小さすぎるとデータが入りきりません。この課題を解決するのが「OCCURS DEPENDING ON」句です。これを使うことで、実行時に必要な分だけメモリを動的に活用できるようになります。

2. 基礎知識:可変長配列の仕組み

通常の配列は「OCCURS 50 TIMES」のように回数を固定しますが、可変長配列は「OCCURS 1 TO 50 TIMES DEPENDING ON …」と記述します。
ここでのポイントは、「DEPENDING ON」の後ろに指定する項目(制御項目)です。プログラムは、この制御項目の数値を見て、「今は何個のデータが入っているか」を判断します。ファイル入出力を行う際、この制御項目の値を正しくセットして書き出すことで、可変長レコードとして正確に保存・読み込みが可能になります。

3. 実装・解決策

実装のステップは以下の通りです。
1. 制御項目(件数を入れる変数)を定義する。
2. 配列の定義に「OCCURS 最小値 TO 最大値 DEPENDING ON 制御項目」を記述する。
3. データを配列にセットする際は、必ず制御項目に現在の件数を代入する。
この手順を守ることで、データ構造を柔軟に変化させることができます。

4. サンプルプログラム

以下のコードは、入力された件数分だけ商品名を配列に格納し、内容を表示する例です。

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. VAR-ARRAY-SAMPLE.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 件数を管理する制御項目
000600 01 WS-COUNT PIC 9(02).
000700 01 WS-SUB PIC 9(02).
000800 1から10個まで動的に変わる配列
000900 01 WS-TABLE.
001000 05 WS-ITEM PIC X(10)
001100 OCCURS 1 TO 10 TIMES DEPENDING ON WS-COUNT.
001200
001300 PROCEDURE DIVISION.
001400 件数を3に設定(配列が3つ分になる)
001500 MOVE 3 TO WS-COUNT.
001600
001700 配列に値を格納
001800 MOVE “APPLE” TO WS-ITEM(1).
001900 MOVE “ORANGE” TO WS-ITEM(2).
002000 MOVE “BANANA” TO WS-ITEM(3).
002100
002200 内容を表示
002300 PERFORM VARYING WS-SUB FROM 1 BY 1 UNTIL WS-SUB > WS-COUNT
002400 DISPLAY “ITEM(” WS-SUB “) = ” WS-ITEM(WS-SUB)
002500 END-PERFORM.
002600
002700 STOP RUN.

5. 応用・注意点

現場で扱う際に注意すべき点が2つあります。
一つ目は「制御項目の書き換え」です。配列にデータを詰め込んだ後、制御項目の値を変更すると、プログラム側から見た配列の有効範囲が変わってしまいます。デバッグ中に値が意図せず変わっていないか注意しましょう。
二つ目は「ファイル出力」です。可変長レコードをファイルに書き出す際、制御項目の値が実際の件数と一致していないと、読み出し時にゴミデータが混ざったり、データ欠損の原因になったりします。必ず「書き込み直前に制御項目を確定させる」癖をつけましょう。

この機能を使いこなせれば、複雑なデータ構造もスマートに処理できるようになります。ぜひ試してみてくださいね。

コメント

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