添え字付けとは、正の整数を使用してテーブル参照を行う手法のことです。 添え字とは、テーブル・エレメントのオカレンス番号を指定する正の整数値 (または整数データ項目) です。
添え字付け - 形式 .------------------------. V | >>-+-条件名-1---+----+--------------------+-+-------------------> '-データ名-1-' '-+-IN-+--データ名-2-' '-OF-' >--+----------------------+-------------------------------------> '-+-IN-+--ファイル名-1-' '-OF-' .------------------------------------. V | >--(----+-整数-1-------------------------+-+--)---------------->< +-ALL----------------------------+ +-データ名-3--+----------------+-+ | '-+-+--+--整数-2-' | | '- --' | '-指標名-1--+----------------+---' '-+-+--+--整数-3-' '- --'
データ名-3 は修飾できます。
括弧で囲まれた添え字は、テーブル・エレメントの名前の修飾を直後に続けて書きます。 このような参照の添え字の数は、そのエレメントが参照されているテーブルの次元の数と等しくなければなりません。 すなわち、データ名そのものも含めて、データ名の入っている階層の各 OCCURS 文節に 1 つの添え字がなければなりません。
複数の添え字が必要とされるときには、それらはデータ編成を含めた小さい方の次元から連続した順序で書かれます。 複数の次元のテーブルが連続するネストされたテーブルであると見なされ、ネストの一番外側のテーブルが大テーブルで、 一番内側が小テーブルであると見なされる場合、添え字は大、中、小の順番で左から右へ書かれます。
たとえば、TABLE-THREE が次のように定義されている場合、
01 TABLE-THREE. 05 ELEMENT-ONE OCCURS 3 TIMES. 10 ELEMENT-TWO OCCURS 3 TIMES. 15 ELEMENT-THREE OCCURS 2 TIMES PIC X(8).
TABLE-THREE への有効な添え字付き参照は次のとおりです。
ELEMENT-THREE (2 2 1)
項目への参照は、 その項目がテーブル・エレメントまたはテーブル・エレメントに関連した項目または条件名でなければ、添え字付きにしてはなりません。
各テーブル・エレメント参照は、次のような参照が行われる場合を除き、添え字を付ける必要があります。
添え字によって表される最低の許容オカレンス数は 1 です。 どのような特定の場合でも最高の許容オカレンス数は、OCCURS 文節で指定される項目のオカレンスの最大数です。
関連情報
整数またはデータ名が添え字を表すために使用されるとき、それらは異なったテーブル内の項目を参照するために使用できます。 これらのテーブルは、同じサイズのエレメントを持つ必要はありません。 同じ整数またはデータ名を、1 つの項目を持つ唯一の添え字および別の項目を持つ複数の添え字の中の 1 つとして表すことができます。 各データ名は、修飾できますが、添え字付きまたは指標付きとすることはできません。 たとえば、TABLE-THREE への有効な添え字付き参照には次のものがあります (SUB1、SUB2、および SUB3 はすべて、SUBSCRIPT-ITEM に従属する項目であると想定します)。
ELEMENT-THREE (SUB1 SUB2 SUB3) ELEMENT-THREE IN TABLE-THREE (SUB1 OF SUBSCRIPT-ITEM, SUB2 OF SUBSCRIPT-ITEM, SUB3 OF SUBSCRIPT-ITEM)
指標付けにより、テーブル検索や特定項目の操作などの操作を行うことができます。 指標付けを使用するには、データ記述記入項目に OCCURS 文節が入っているデータ記述記入項目に 1 つまたは複数の指標名を関連付けます。 指標名と関連する指標は添え字として機能し、その値は指標名と関連する項目のオカレンス番号に対応します。
テーブルと関連する指標名を識別する INDEXED BY 句は、OCCURS 文節のオプショナルの部分です。 指標名の定義は完全にシステム依存なので、指標名を記述する別の項目はありません。 指標名は、このプログラムだけが使用するためにコンパイラーが生成したレジスターと考えることができます。 指標名はデータまたはデータ階層の一部ではなく、COBOL プログラムの中で固有でなければなりません。
各指標名は、ユーザー定義語の形成規則に従っていなければなりません。
各指標名は、コンパイラーが生成したレジスターまたは記憶域を指します。
オブジェクト時の指標の初期値が定義されないときは、指標は添え字として使用される前に初期設定されなければなりません。 指標の初期値は以下のいずれかにより割り当てられます。
CALL ステートメントの USING 句のパラメーターとしてまたは関係条件比較の中で指標名を参照できるのは、PERFORM、SET、または SEARCH ステートメントだけです。
テーブル・エレメントまたはテーブル・エレメント内の項目を参照する添え字としての整数またはデータ名を使っても、そのテーブルに関連付けられている指標に変化はありません。
指標名は、INDEXED BY 句によって関連付けられるテーブルだけへの参照として使用できます。
テーブルの形式内に配列されるデータは、しばしば検索されます。 SEARCH ステートメントには、逐次検索および非逐次 (たとえば、2 進) 検索の機能があります。 これは、特定の条件を満たすテーブル・エレメントの検索およびそのテーブル・エレメントを示す関連した指標の値の調整に使用されます。
指標値が実行時に有効であるためには、指標値は、オカレンス番号が 1 以上であり、かつ許容できる最高値以下のテーブル・エレメントのオカレンスに対応している必要があります。
指標名についての詳細は、OCCURS 文節の INDEXED BY 句に記述されています。 INDEXED BY 句を参照してください。
相対添え字付けの場合、テーブル・エレメントの名前の後に、データ名または指標名の次に + または - の演算子と符号なしの整数リテラルという形式の添え字が続きます。 演算子の + および - の前後には、スペースを置かなければなりません。 添え字にデータ名が入っている場合、添え字の値は、データ名が整数の値によって設定された後の値と同じ値になります。 添え字に指標名が入っている場合、整数はオカレンス番号と見なされ、指標名への加算や減算の前に指標値に変換されます。 相対指標付けの使用によって、オブジェクト・プログラムが指標の値を変化させることはありません。
指標の値は、指標データ項目の値を保管することによってオブジェクト・プログラムへアクセス可能にすることができます。 指標データ項目は、USAGE IS INDEX 文節を含んでいるデータ記述記入項目によってプログラムに記述されます。 指標値は、SET ステートメントを実行することによって指標データ項目に移されます。
有効な指標値は、オカレンス番号が 1 以上で許容できる最高の値以下のテーブル・エレメントのオカレンスに対応していなければなりません。
指標名についての詳細は、OCCURS 文節の INDEXED BY 句に記述されています。 INDEXED BY 句を参照してください。