ILE COBOL 解説書

可変長テーブル

可変長テーブルは、OCCURS 文節の形式 2 を使用して指定されます。

OCCURS 文節 - 形式 2 - 可変長テーブル
 
>>-OCCURS--整数-1--TO--整数-2--+-------+--DEPENDING--+----+----->
                               '-TIMES-'             '-ON-'
 
>--データ名-1--------------------------------------------------->
 
   .-----------------------------------------------------.
   V                                                     |
>----+-------------------------------------------------+-+------>
     |                                  .------------. |
     |                                  V            | |
     '-+-ASCENDING--+--+-----+--+----+----データ名-2-+-'
       '-DESCENDING-'  '-KEY-'  '-IS-'
 
>--+-------------------------------+---------------------------><
   |                  .----------. |
   |                  V          | |
   '-INDEXED--+----+----指標名-1-+-'
              '-BY-'
 
 

サブジェクト項目の長さは固定されています。 可変であるのは、そのサブジェクト項目の反復回数だけです。

整数-1
最小のオカレンス数。

整数-1 の値は、ゼロかそれ以上でなければならず、 また、整数-2 の値より小さくなければなりません。

整数-2
最大オカレンス数。
データ名-1
OCCURS DEPENDING ON 文節のオブジェクト、つまり、サブジェクト項目の現行オカレンス数を表す現行値をもった (整数) データ項目を指定します。 オカレンス番号がオブジェクトの値を超える項目の内容は、予測できません。

OCCURS DEPENDING ON 文節のオブジェクトは、どのテーブルの範囲内のどの記憶位置 (すなわち、テーブルの最初の文字位置からテーブルの最後の文字位置までのすべての記憶位置) も占めてはなりません。

OCCURS DEPENDING ON 文節のオブジェクトは、位置が可変でない場合があります。 このオブジェクトは、OCCURS DEPENDING ON 文節を含んでいる項目の後に置くことはできません。

グループ項目 (あるいは、従属した OCCURS DEPENDING ON 項目を含んでいるデータ項目、 または OCCURS DEPENDING ON 項目の後にあるが、この項目に従属していないデータ項目) を参照するときには、OCCURS DEPENDING ON 文節のオブジェクトの値は、 整数-1 から整数-2 までの範囲内になければなりません。 グループの位置が可変でないとすれば、参照されるグループが CALL BY REFERENCE ステートメントで使われているときには、この規則は適用されません。

EXTERNAL 文節の入ったレコード記述記入項目に含まれるデータ記述記入項目に OCCURS 文節を指定するときは、 データ名-1 は、同じデータ部に記述された EXTERNAL 属性を持つデータ項目を参照しなければなりません。

データ記述記入項目が GLOBAL 文節の入ったものに従属するときは、 データ名-1 はグローバル名でなければならず、同じデータ部に記述されたデータ項目を参照しなければなりません。

従属 OCCURS DEPENDING ON 項目を含むグループ項目が参照される場合、 テーブル域のどの部分が処理に使用されるかは、次のように判別されます。

可変長テーブルの入ったグループ項目に対して参照変更を加えると、その参照変更で参照されるデータ項目から固有データ項目が作成されます。 その参照されるデータ項目の長さは、まず前の規則を適用して判別されます。 その後、参照変更の規則が適用され、その固有データ項目の長さが判別されます。

CALL ステートメントの USING 句で引数として可変長テーブルの入ったグループ項目が使用されると、 呼び出し先プログラムの立場から見たそのパラメーターのストレージ・サイズは、その引数の渡し方によって異なります。 引数が BY REFERENCE で渡されるとき、最大サイズは、呼び出し側プログラム内の引数のデータ記述によって記述されます。 引数が BY CONTENT で渡されるとき、グループ項目は送り出し項目とみなされます。

グループ項目の後に非従属項目が続く場合、実際の長さ (最大長ではなく) が使用されます。 項目のサブジェクト (あるいは、項目のサブジェクトに従属するデータ項目、または項目のサブジェクトの上位のデータ項目) を参照するときには、OCCURS DEPENDING ON 文節のオブジェクトの値は、整数-1 から整数-2 までの範囲内になければなりません。

OCCURS 文節のサブジェクトは、OCCURS 文節を含むデータ項目のデータ名です。 OCCURS 文節のサブジェクトがタイプ名に従属する場合があります。 OCCURS 文節そのものを除いて、サブジェクトに対して使用されるデータ記述文節は、記述される項目のそれぞれのオカレンスに適用されます。

サブジェクトが SEARCH または USE FOR DEBUGGING 以外のステートメントで使用されているときはいつでも、サブジェクトが REDEFINES 文節のオブジェクトでないかぎり、添え字や指標を付ける必要があります。 この場合、サブジェクトはテーブル・エレメントの中の 1 つのオカレンスを指します。

サブジェクトが SEARCH で使用されている場合、USE FOR DEBUGGING ステ ートメントで使用されている場合、あるいは、サブジェクトが REDEFINES 文節 のオブジェクトの場合は、添え字および指標を付けてはなりません この場合、サブジェクトはテーブル・エレメント全体を表します。

上記の 2 つの制限は LENGTH OF 特殊レジスターには適用されないことに注意してください。

1 つのレコード記述記入項目では、OCCURS DEPENDING ON 文節を含む記入項目の後には、それに従属する項目またはレベル 66 の項目だけしか続けることはできません。

OCCURS DEPENDING ON 文節は、別の OCCURS 文節に従属するものとして指定することはできません。

+----------------------------------IBM 拡張----------------------------------+

複合 OCCURS DEPENDING ON は、以下のように構成されます。

複合 OCCURS DEPENDING ON について詳しくは 付録 H, 複合 OCCURS DEPENDING ONを参照してください。

+------------------------------End of IBM 拡張-------------------------------+

OCCURS 文節に使用するすべてのデータ名は修飾できますが、そのデータ名に添え字または指標を付けることはできません。

OCCURS または OCCURS DEPENDING ON 文節は、次のようなデータ記述記入項目には指定できません。

ASCENDING/DESCENDING および INDEXED BY 文節については 固定長テーブルで説明されています。

注:
OCCURS DEPENDING ON 文節を使用する場合には、 テーブルに含まれるオカレンス数は、16,711,568 を超えてはならず、テーブル・エレメントの長さも 16,711,568 バイトを超えてはならず、 さらにテーブル全体の長さも 16,711,568 バイトを超えてはなりません。

+----------------------------------IBM 拡張----------------------------------+

複合 OCCURS DEPENDING ON は COBOL 85 標準の拡張としてサポートされます。 コンパイラーによって許可される複合 ODO の基本形式を以下に示します。

複合 ODO は使用が容易でなく、コードの維持管理を困難にする可能性があります。 ディスク・スペースを節約するために使用する場合には 付録 H, 複合 OCCURS DEPENDING ONに示したガイドラインに従ってください。

+------------------------------End of IBM 拡張-------------------------------+


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]