Rational Developer for System z
COBOL for Windows バージョン 7.5 プログラミング・ガイド


可変長テーブルの作成 (DEPENDING ON)

テーブル・エレメントが出現する回数が実行前にわからない場合には、可変長テーブルを定義しなければなりません。 そのためには、OCCURS DEPENDING ON (ODO) 文節を使用します。

X OCCURS 1 TO 10 TIMES DEPENDING ON Y

上の例で、XODO サブジェクト と呼び、YODO オブジェクト と呼びます。

可変長レコードを正しく操作するためには、次の 2 つの要因が影響します。

次の例は、OCCURS DEPENDING ON 文節のサブジェクトとオブジェクトの両方を含むグループ項目 (REC-1) を示しています。グループ項目の長さがどのようにして決定されるかは、それがデータを送り出しているのか、データを受け取っているのかによって異なります。

WORKING-STORAGE SECTION.
01  MAIN-AREA.
    03 REC-1.
        05 FIELD-1                       PIC 9.
        05 FIELD-2 OCCURS 1 TO 5 TIMES
           DEPENDING ON FIELD-1          PIC X(05).
01  REC-2.
    03 REC-2-DATA                        PIC X(50).

REC-1 (この場合は送り出し項目) を REC-2 に移動したい場合、REC-1 の長さは、FIELD-1 の現行値を使用して、移動の直前に決定されます。 FIELD-1 の内容がその PICTURE 文節と一致している場合 (すなわち、 FIELD-1ゾーン 10 進数項目を含んでいる場合)、REC-1 の実際の長さに基づいて移動は続行可能です。それ以外の場合は、結果は予測できません。 移動を開始する前に、ODO オブジェクトに正しい値が含まれていることを確認してください。

REC-1 (この場合は受け取り項目) に移動を行う場合、REC-1 の長さは、最大のオカレンス回数を使用して決定されます。この例では、FIELD-2 の 5 回のオカレンスと FIELD-1 の合計で 26 バイトの長さになります。この場合、REC-1 を受け取り項目として参照する前に、ODO オブジェクト (FIELD-1) を設定する必要はありません。 ただし、移動によって受信フィールドの ODO オブジェクトを有効に設定するようにするためには、送信フィールドの ODO オブジェクトを 1 から 5 の間の有効な数値に設定しなければなりません。

しかし、REC-1 の後に可変位置グループ (複合 ODO) が続いているような REC-1 (この場合も受け取り項目) に移動を行う場合は、REC-1 の実際の長さは、移動の直前に ODO オブジェクト (FIELD-1) の現行値を使用して計算されます。次の例では、REC-1REC-2 は同じレコードにありますが、REC-2REC-1 に従属していないため、可変位置項目です。

01  MAIN-AREA
    03 REC-1.
       05 FIELD-1                       PIC 9.
       05 FIELD-3                       PIC 9.
       05 FIELD-2 OCCURS 1 TO 5 TIMES
            DEPENDING ON FIELD-1        PIC X(05).
    03 REC-2.
       05 FIELD-4 OCCURS 1 TO 5 TIMES
            DEPENDING ON FIELD-3        PIC X(05).

コンパイラーは、実際の長さが使用されたことを知らせるメッセージを出します。この場合には、グループ項目を受信フィールドとして使用する前に、ODO オブジェクトの値を設定することが必要となります。

次の例は、ODO オブジェクト (下の LOCATION-TABLE-LENGTH) がグループの外側にあるときの、可変長テーブルの定義方法を示します。

 DATA DIVISION.
 FILE SECTION.
 FD  LOCATION-FILE.
 01  LOCATION-RECORD.
     05  LOC-CODE                  PIC XX.
     05  LOC-DESCRIPTION           PIC X(20).
     05  FILLER                    PIC X(58).
 WORKING-STORAGE SECTION.
 01  FLAGS.
     05 LOCATION-EOF-FLAG          PIC X(5) VALUE SPACE.
        88 LOCATION-EOF               VALUE “FALSE”.
 01  MISC-VALUES.
     05 LOCATION-TABLE-LENGTH      PIC 9(3) VALUE ZERO.
     05 LOCATION-TABLE-MAX         PIC 9(3) VALUE 100.
*****************************************************************
***                L O C A T I O N   T A B L E                ***
***                FILE CONTAINS LOCATION CODES.              ***
*****************************************************************
 01  LOCATION-TABLE.
     05 LOCATION-CODE OCCURS 1 TO 100 TIMES
          DEPENDING ON LOCATION-TABLE-LENGTH   PIC X(80).

関連概念
付録D. 複合 OCCURS DEPENDING ON

関連タスク
可変長テーブルへの値の割り当て
可変長テーブルのロード
エレメントを可変テーブルに追加する際のオーバーレイを防止する
データ項目の長さの検出

関連参照
OCCURS DEPENDING ON 文節 (「COBOL for Windows 言語解説書」)


ご利用条件 | フィードバック

Copyright IBM Corporation 1996, 2008.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)