COBOL

OCCURSと表データ

複数の値を表として持ち、添字で検索・集計する方法を学びます。

COBOL入門の講座一覧

01

OCCURSで表を定義する

OCCURSは、同じ形式のデータを複数個持つ表を定義します。次の例では、3人分の点数を配列のように扱います。

3人の点数COBOL
01 SCORES.
    05 SCORE PIC 9(3) OCCURS 3 TIMES.

SCORE (1)、SCORE (2)のように括弧内の添字を指定します。COBOLではデータ名と添字の間に空白を入れても読めますが、既存コードの書き方に合わせるのが安全です。

02

添字で値を読み書きする

添字を1から始めて、PERFORM VARYINGで順番に値を設定できます。ループ終了後の添字の値にも注意しましょう。

表へ点数を入れるCOBOL
01 SCORES.
    05 SCORE PIC 9(3) OCCURS 3 TIMES.
01 I PIC 9 VALUE 1.

PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
    COMPUTE SCORE (I) = I * 25
END-PERFORM.

DISPLAY SCORE (1) " / " SCORE (2) " / " SCORE (3).
実行結果OUTPUT
025 / 050 / 075
04

表の値を集計する

合計用の項目を0で初期化し、各要素をADDします。合計項目を初期化し忘れると、前回の計算結果が混ざるため注意が必要です。

合計と平均を求めるCOBOL
01 SCORES.
    05 SCORE PIC 9(3) OCCURS 3 TIMES.
01 TOTAL PIC 9(4) VALUE 0.
01 AVERAGE PIC 9(3).
01 I PIC 9.

MOVE 70 TO SCORE (1).
MOVE 80 TO SCORE (2).
MOVE 90 TO SCORE (3).

PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
    ADD SCORE (I) TO TOTAL
END-PERFORM.
COMPUTE AVERAGE = TOTAL / 3.
DISPLAY "合計=" TOTAL " 平均=" AVERAGE.
実行結果OUTPUT
合計=0240 平均=080
05

練習

5人分の点数をOCCURS 5 TIMESで定義し、合計、最高点、60点以上の人数を求めてください。点数を変えた場合も正しい結果になるようにします。

余裕があれば、商品コードと商品名を同じ回数のOCCURSで持ち、コードから商品名を検索して表示してみましょう。