OCCURS(反復)句

機能

OCCURS(反復)句は、同じデータ項目が繰り返されるとき、その記述項をいちいち指定する手間を省き、添字(subscript)や指標(index)を付けるために必要な情報を与える。

一般形式

形式 1

形式 2

指令

  1. 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。

    • ODOOSVS - OCCURS DEPENDING ON句について、OS/VS COBOLと互換性のある処理を行うよう要求する。

    • ODOSLIDE - ネストされたOCCURS DEPENDING ON句、およびOCCURS DEPENDING ON句の後ろに続く固定データの処理を制御する。

    • REENTRANT - プログラムをマルチスレッド環境で使用可能にする。

構文規則

  1. 整数-1と整数-2を両方指定する場合、整数-1は1以上であるか、

    または0に等しく、

    整数-2は整数-1よりも大きいか、

    または等しく

    する。

    形式 2において、" 整数-1 TO " を省略すると、省略時解釈として1がとられる。

  2. データ名-1のデータ記述は、整数とする。

  3. データ名-1、データ名-2、データ名-3、...は修飾できる。

  4. データ名-2は、OCCURS句を含む記述項の名前であるか、またはその下位に属する記述項の名前とする。

    この制限は無視してよい。

  5. データ名-3などは、その下位に属する記述項の名前にする。

    この制限は無視してよい。

  6. OCCURS句の対象またはその下位に属する記述項を指標を用いて参照する場合、INDEXED BY(指標付き)句を指定する。

    ただし、他の表用に定義した指標を使用する場合は、その必要はない。( COBOL言語の概念の章の指標付け節を参照。)

    ここに指定する指標名はデータとして扱われず、データの階層にも属さない。

  7. レコード記述内で、形式 2の OCCURS句が含まれるデータ記述項の後ろに続けられるのは、その下位に属するデータ記述項だけである。

    レコード記述内で、形式 2のOCCURS句が含まれるデータ記述項の後ろに、その下位に属さないデータ記述項を続けることができる。データ名-1のデータ項目の値が変更された場合は、表の後に続く(ただし、その下位ではない)データ項目の位置が変更される。これらの項目に含まれるデータは、失われる場合がある。

    NOODOSLIDEシステム指令を設定した場合は、表を含む集団項目はすべて、データ名-1の値にかかわらず、常に最大の回数だけ反復されるものとみなされる。したがって、表の後に続くデータ項目の位置は変更されない。

  8. OCCURS句は、下記のデータ記述項には指定できない。

    1. レベル番号が 66 または 88のもの

    2. 大きさが可変な項目を記述するもの。大きさが可変な項目とは、下位の項目のデータ記述に、形式 2 のOCCURS句が含まれるものである。

      形式 2のOCCURS句を指定したデータ項目の下位に属するデータ記述に、OCCURS句を指定できる。

  9. OCCURS句は、01レベルまたは77レベルのデータ記述項には指定できない。

    この制限は削除された。

  10. 形式 2において、データ名-1によって定義されるデータ項目は、OCCURS句を含むデータ記述項によって定義される最初の文字位置から最後の文字位置までの範囲内にあってはならない(OCCURS句の対象のデータ項目と、別の記憶域を占めるデータ項目にすること)。

    OCCURS DEPENDING ON Slide指令を設定した場合は、データ名-1は固定位置であること。

  11. データ名-2がこの記述項の左辺ではないとき、下記のようにする。

    1. KEY IS(キーは)句に指定するデータ名の項目はすべて、この記述項の左辺である集団項目に含まれているものとする。

    2. KEY IS句に指定するデータ名の項目は、OCCURS句を含んではならない。

    3. KEY IS句に指定するデータ名の項目とこの記述項の左辺との間には、OCCURS句が含まれる記述項を置いてはならない。

  12. 指標名-1、指標名-2などは、原始要素内で一意の語とする。

    指標名-1、指標名-2...は一意である必要はなく、この記述項の左辺のデータ名によって修飾できる。

  13. 外部浮動小数点数データ項目および内部浮動小数点数データ項目に対して、OCCURS句を指定できる。

  14. KEY句は、字類がオブジェクトのデータ項目に対して記述してはならない。

一般規則

  1. OCCURS句は、表または同形のデータ項目の反復を定義するために使用する。OCCURS句を指定した場合、文の中でこの記述項の左辺であるデータ名を参照するときは、添字または指標を付ける。ただし、SEARCH、

    SORT、

    およびUSE FOR DEBUGGINGの各文は例外である。さらに、この記述項の左辺が集団項目の名前である場合、その集団に属するデータ項目を作用対象として使用するときには、すべて添字または指標を付ける。ただし、REDEFINES句の作用対象として用いる場合は例外である。 (COBOL言語の概念の章の添字付け指標付け および一意名 の各節を参照。)

  2. OCCURS句を指定した項目のデータ記述句はすべて、反復される各項目にも使用される。ただし、OCCURS句自体は反復しては使用されない。

  3. データ名-1は固定位置に置く。したがって、OCCURS DEPENDING ON句を含む項目の後ろには置けない。

  4. 記述項の左辺の反復回数は、下記のように定まる。

    1. 形式 1では、整数-2の値が一定の反復回数を表わす。

    2. 形式 2では、データ名-1によって参照されるデータ項目の現在の値が反復回数を表わす。

      この形式は、この記述項の左辺の反復回数が可変であることを表わす。整数-2の値は最大反復回数を表わし、整数-1の値は最小反復回数を表わす。このことは必ずしもこの記述項の左辺の長さが可変であることを意味するのではなく、反復回数が可変であることを意味する。

      データ名-1によって参照されるデータ項目の値は、整数-1から整数-2の範囲に入らなければならない。データ名-1のデータ項目の値を小さくすると、それよりも出現番号の大きいデータ項目の内容は保証されない。

  5. 形式 2OCCURS句で記述された項目を含む集団項目を参照すると、使用される表の領域は下記のように決定される。

    1. データ名-1によって参照されるデータ項目がその集団項目の外にあるならば、表領域のうちの参照処理が開始される時点で、そのデータ項目の値によって指定される部分が使用される。

    2. データ名-1によって参照されるデータ項目がその集団項目に含まれており、集団データ項目が送出し側としてだけ参照されているならば、表領域のうちの参照処理が開始される時点で、そのデータ項目の値によって指定される部分だけが使用される。その集団項目が受取り側になっている場合は、表の最大領域が使用される。

  6. KEY IS句は、データ名-2、データ名-3などの値に従って、昇順(ascending)または降順(descending)に反復データを並べることを指定する。昇順または降順は、作用対象の比較の規則に従って決められる。(手続き部比較条件節を参照。) これらのデータ名はキーの強さの順に左から右へ指定する。

  7. 指標名-1、指標名-2...に割り当てられた記憶域の種類は、プログラムが再帰的である(局所記憶節が定義されている)かどうか、およびREENTRANTコンパイラ指令が指定されているかどうかにより決まる。

    表 8-1は、非再帰プログラムに記憶域が割り当てられる方法を示す。表 8-2 は、再帰プログラムに記憶域が割り当てられる方法を示す。

    > 表 8-1: 非再帰プログラムの指標名に割り当てられる記憶域
    指標名を定義する節  指標名を割り当てる節  
    NOREENTRANT REENTRANT (1)  REENTRANT (2)
    作業場所 作業場所 作業場所 スレッド局所
    スレッド局所 スレッド局所 スレッド局所 スレッド局所
    連結 作業場所 局所記憶 局所記憶

    > 表 8-2: 再帰プログラムの指標名に割り当てられる記憶域
    指標名を定義する節  指標名を割り当てる節    
    NOREENTRANT REENTRANT (1)  REENTRANT (2)
    作業場所 作業場所 作業場所 スレッド局所
    スレッド局所 スレッド局所 スレッド局所 スレッド局所
    局所記憶 局所記憶 局所記憶 局所記憶
    連結 局所記憶 局所記憶 局所記憶
^^^^^^^^^

OCCURS(反復)句

機能

OCCURS(反復)句は、同じデータ項目が繰り返されるとき、その記述項をいちいち指定する手間を省き、添字(subscript)や指標(index)を付けるために必要な情報を与える。

一般形式

形式 1

形式 2

指令

  1. 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。

    • ODOOSVS - OCCURS DEPENDING ON句について、OS/VS COBOLと互換性のある処理を行うよう要求する。

    • ODOSLIDE - ネストされたOCCURS DEPENDING ON句、およびOCCURS DEPENDING ON句の後ろに続く固定データの処理を制御する。

    • REENTRANT - プログラムをマルチスレッド環境で使用可能にする。

構文規則

  1. 整数-1と整数-2を両方指定する場合、整数-1は1以上であるか、

    または0に等しく、

    整数-2は整数-1よりも大きいか、

    または等しく

    する。

    形式 2において、" 整数-1 TO " を省略すると、省略時解釈として1がとられる。

  2. データ名-1のデータ記述は、整数とする。

  3. データ名-1、データ名-2、データ名-3、...は修飾できる。

  4. データ名-2は、OCCURS句を含む記述項の名前であるか、またはその下位に属する記述項の名前とする。

    この制限は無視してよい。

  5. データ名-3などは、その下位に属する記述項の名前にする。

    この制限は無視してよい。

  6. OCCURS句の対象またはその下位に属する記述項を指標を用いて参照する場合、INDEXED BY(指標付き)句を指定する。

    ただし、他の表用に定義した指標を使用する場合は、その必要はない。( COBOL言語の概念の章の指標付け節を参照。)

    ここに指定する指標名はデータとして扱われず、データの階層にも属さない。

  7. レコード記述内で、形式 2の OCCURS句が含まれるデータ記述項の後ろに続けられるのは、その下位に属するデータ記述項だけである。

    レコード記述内で、形式 2のOCCURS句が含まれるデータ記述項の後ろに、その下位に属さないデータ記述項を続けることができる。データ名-1のデータ項目の値が変更された場合は、表の後に続く(ただし、その下位ではない)データ項目の位置が変更される。これらの項目に含まれるデータは、失われる場合がある。

    NOODOSLIDEシステム指令を設定した場合は、表を含む集団項目はすべて、データ名-1の値にかかわらず、常に最大の回数だけ反復されるものとみなされる。したがって、表の後に続くデータ項目の位置は変更されない。

  8. OCCURS句は、下記のデータ記述項には指定できない。

    1. レベル番号が 66 または 88のもの

    2. 大きさが可変な項目を記述するもの。大きさが可変な項目とは、下位の項目のデータ記述に、形式 2 のOCCURS句が含まれるものである。

      形式 2のOCCURS句を指定したデータ項目の下位に属するデータ記述に、OCCURS句を指定できる。

  9. OCCURS句は、01レベルまたは77レベルのデータ記述項には指定できない。

    この制限は削除された。

  10. 形式 2において、データ名-1によって定義されるデータ項目は、OCCURS句を含むデータ記述項によって定義される最初の文字位置から最後の文字位置までの範囲内にあってはならない(OCCURS句の対象のデータ項目と、別の記憶域を占めるデータ項目にすること)。

    OCCURS DEPENDING ON Slide指令を設定した場合は、データ名-1は固定位置であること。

  11. データ名-2がこの記述項の左辺ではないとき、下記のようにする。

    1. KEY IS(キーは)句に指定するデータ名の項目はすべて、この記述項の左辺である集団項目に含まれているものとする。

    2. KEY IS句に指定するデータ名の項目は、OCCURS句を含んではならない。

    3. KEY IS句に指定するデータ名の項目とこの記述項の左辺との間には、OCCURS句が含まれる記述項を置いてはならない。

  12. 指標名-1、指標名-2などは、原始要素内で一意の語とする。

    指標名-1、指標名-2...は一意である必要はなく、この記述項の左辺のデータ名によって修飾できる。

  13. 外部浮動小数点数データ項目および内部浮動小数点数データ項目に対して、OCCURS句を指定できる。

  14. KEY句は、字類がオブジェクトのデータ項目に対して記述してはならない。

一般規則

  1. OCCURS句は、表または同形のデータ項目の反復を定義するために使用する。OCCURS句を指定した場合、文の中でこの記述項の左辺であるデータ名を参照するときは、添字または指標を付ける。ただし、SEARCH、

    SORT、

    およびUSE FOR DEBUGGINGの各文は例外である。さらに、この記述項の左辺が集団項目の名前である場合、その集団に属するデータ項目を作用対象として使用するときには、すべて添字または指標を付ける。ただし、REDEFINES句の作用対象として用いる場合は例外である。 (COBOL言語の概念の章の添字付け指標付け および一意名 の各節を参照。)

  2. OCCURS句を指定した項目のデータ記述句はすべて、反復される各項目にも使用される。ただし、OCCURS句自体は反復しては使用されない。

  3. データ名-1は固定位置に置く。したがって、OCCURS DEPENDING ON句を含む項目の後ろには置けない。

  4. 記述項の左辺の反復回数は、下記のように定まる。

    1. 形式 1では、整数-2の値が一定の反復回数を表わす。

    2. 形式 2では、データ名-1によって参照されるデータ項目の現在の値が反復回数を表わす。

      この形式は、この記述項の左辺の反復回数が可変であることを表わす。整数-2の値は最大反復回数を表わし、整数-1の値は最小反復回数を表わす。このことは必ずしもこの記述項の左辺の長さが可変であることを意味するのではなく、反復回数が可変であることを意味する。

      データ名-1によって参照されるデータ項目の値は、整数-1から整数-2の範囲に入らなければならない。データ名-1のデータ項目の値を小さくすると、それよりも出現番号の大きいデータ項目の内容は保証されない。

  5. 形式 2OCCURS句で記述された項目を含む集団項目を参照すると、使用される表の領域は下記のように決定される。

    1. データ名-1によって参照されるデータ項目がその集団項目の外にあるならば、表領域のうちの参照処理が開始される時点で、そのデータ項目の値によって指定される部分が使用される。

    2. データ名-1によって参照されるデータ項目がその集団項目に含まれており、集団データ項目が送出し側としてだけ参照されているならば、表領域のうちの参照処理が開始される時点で、そのデータ項目の値によって指定される部分だけが使用される。その集団項目が受取り側になっている場合は、表の最大領域が使用される。

  6. KEY IS句は、データ名-2、データ名-3などの値に従って、昇順(ascending)または降順(descending)に反復データを並べることを指定する。昇順または降順は、作用対象の比較の規則に従って決められる。(手続き部比較条件節を参照。) これらのデータ名はキーの強さの順に左から右へ指定する。

  7. 指標名-1、指標名-2...に割り当てられた記憶域の種類は、プログラムが再帰的である(局所記憶節が定義されている)かどうか、およびREENTRANTコンパイラ指令が指定されているかどうかにより決まる。

    表 8-1は、非再帰プログラムに記憶域が割り当てられる方法を示す。表 8-2 は、再帰プログラムに記憶域が割り当てられる方法を示す。

    > 表 8-1: 非再帰プログラムの指標名に割り当てられる記憶域
    指標名を定義する節  指標名を割り当てる節  
    NOREENTRANT REENTRANT (1)  REENTRANT (2)
    作業場所 作業場所 作業場所 スレッド局所
    スレッド局所 スレッド局所 スレッド局所 スレッド局所
    連結 作業場所 局所記憶 局所記憶

    > 表 8-2: 再帰プログラムの指標名に割り当てられる記憶域
    指標名を定義する節  指標名を割り当てる節    
    NOREENTRANT REENTRANT (1)  REENTRANT (2)
    作業場所 作業場所 作業場所 スレッド局所
    スレッド局所 スレッド局所 スレッド局所 スレッド局所
    局所記憶 局所記憶 局所記憶 局所記憶
    連結 局所記憶 局所記憶 局所記憶