メインコンテンツにスキップ
モジュール 4 · レッスン 2 / 2コース内の 8/10~15 min
モジュールのレッスン (2/2)

テーブルと OCCURS 句

COBOL には、同種データのリストを定義するための「配列」または「ベクトル」キーワードはありません。この目的のために、変数または構造体がメモリ内で繰り返される回数を指定する OCCURS 句を使用します。

OCCURS を使用したテーブルの定義

OCCURS 句は、グループ構造 (レベル 01) 内の従属変数 (たとえば、レベル 05 以上) の宣言に追加されます。

COBOL
01 WS-SALES-DATA.
    05 WS-MONTHLY-SALES PIC 9(4) OCCURS 12 TIMES.

この例では、WS-MONTHLY-SALES は、それぞれ 4 桁の 12 個の数値要素で構成されるテーブルです。このレコードに割り当てられるメモリは、ちょうど 12 * 4 = 48 文字になります。

要素とインデックスへのアクセス

テーブル内の特定の要素にアクセスするには、フィールド名の直後に括弧内にインデックスを指定します。

[!重要] 0 から始まるインデックスを使用する最新の言語とは異なり、COBOL は 1 から始まるインデックスを使用します。最初の要素はインデックス 1 にあり、2 番目の要素はインデックス 2 にあります。

COBOL
MOVE 1500 TO WS-MONTHLY-SALES(1).
MOVE 2400 TO WS-MONTHLY-SALES(2).

テーブルの走査 (反復)

テーブルの要素をループするには、PERFORM VARYING ステートメントを使用するか、PERFORM UNTIL ループでカウンターを手動で管理します。

COBOL
PERFORM UNTIL WS-INDEX > 12
    DISPLAY "Sales: " WS-MONTHLY-SALES(WS-INDEX)
    ADD 1 TO WS-INDEX
END-PERFORM.

自分で試してみてください

運動#cobol.m4.l2.e1
試行回数: 0読み込み中…

OCCURS 句を使用して、WS-WEATHER-DATA グループ構造で 5 つの 10 進数の温度 (3 つの整数と 1 つの小数) のテーブルを宣言します。

エディターを読み込み中…
ヒントを表示

書き込み: 05 WS-TEMPERATURE PIC 9(3)V9 が 5 回発生します。

3 回の試行後に解決策が利用可能になります

運動#cobol.m4.l2.e2
試行回数: 0読み込み中…

MOVE ステートメントを使用して、WS-MONTHLY-SALES テーブルの最初の 3 つの要素をそれぞれ値 1200、1500、および 1800 で初期化します。 COBOL インデックスは 1 から始まることに注意してください。

エディターを読み込み中…
ヒントを表示

MOVE 1200 TO WS-MONTHLY-Sales(1) を使用します。最初の要素に対して、インデックス (2) と (3) を使用して 2 番目と 3 番目の要素を繰り返します。

3 回の試行後に解決策が利用可能になります