ILE COBOL 解説書

データのレベル

レコードを定義した後に、分割されたレコードをさらに分割して、より詳しいデータ参照を行うようにできます。

たとえば、百貨店のカスタマー・ファイルの場合に、1 人のカスタマーに関するすべてのデータを 1 つのレコードに完全に収容することができるとします。 そのレコードを分割したものが、顧客名、顧客住所、顧客番号、販売部門番号、販売単価、販売金額、それまでの残高、およびその他の付随情報であったとします。

レコードの基本的な細分化項目 (それ以上分割されないフィールド) を基本項目といいます。

したがって、レコードは一連の基本項目で構成されている場合もあれば、レコードそれ自体が 1 つの基本項目である場合もあります。

一連の基本項目を参照する必要が生じた場合には、基本項目をまとめてグループ項目にすることができます。 グループ自体を組み合わせて、1 つまたは複数のサブグループを含む、より大きいグループにすることもできます。 したがって、データ項目から成る階層において、1 つの基本項目を複数のグループ項目に属させることができます。

レベル番号体系は、基本項目とグループ項目をレコードに編成する方法を指定するものです。

特殊レベル番号を使うこともでき、この番号で特殊目的に使うデータ項目が識別されます。

関連情報

レコード記述記入項目のデータ・レベル

レコード内のグループ項目および基本項目には、それぞれ別々の記入項目が必要であり、また各項目ごとにレベル番号を割り当てなければなりません。

レベル番号は、01 〜 49 の 1 桁または 2 桁の整数であるか、または 66、77、88 の 3 つの特殊レベル番号のうちの 1 つです。

次のレベル番号が、レコードを構造化するために使用されます。

 01 
このレベル番号は、 レコードそのものを指定する最も包括的なレベル番号です。 レベル 01 の記入項目は、グループ項目または基本項目のどちらでもかまいません。 これは区域 A から始まらなければなりません。(TYPEDEF 文節を使用して定義 した) タイプ名はレベル 01 の項目でなければなりません。
 02 〜 49 
これらのレベル番号は、レコード内のグループ項目や基本項目を指定します。 これらは、区域 A または区域 B から始められます。 データ項目の包括性が低いほど、この一連の番号の中からより高い (必ずしも連続していない) レベル番号が割り当てられます。

1 つのグループ項目には、そのグループのレベル番号より小さいかあるいは等しいレベル番号が現れるまで、そのグループ項目の後ろにあるすべてのグループ項目と基本項目が含まれます。

ある 1 つのグループ項目のすぐ下にあるすべてのグループ項目と基本項目には、上のグループ項目のレベル番号より大きい同一のレベル番号を割り当てなければなりません。

タイプ名がグループ項目である場合、そのタイプ名を TYPE 文節で使用して新しいデータ項目を定義すると、 その新規データ項目には使用されたタイプ名の従属項目と同じ名前、記述、および階層を持つ項目が従属します。 新規データ項目が結果的に持つことになるレベルの数には制限がありません。 その理由を以下に示します。

関連情報

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

コーディング例

ILE COBOL コンパイラーでは、同じレベルの他のものと同じでない非標準レベル番号を使えます。 たとえば、次の 2 つのデータ記述記入項目は同じです。

01   EMPLOYEE-RECORD.
     05  EMPLOYEE-NAME.
         10  FIRST     PICTURE  X(10).
         10  LAST      PICTURE  X(10).
     05  EMPLOYEE-ADDRESS.
         10  STREET    PICTURE  X(10).
         10  CITY      PICTURE  X(10).
01   EMPLOYEE-RECORD.
         05  EMPLOYEE-NAME.
             10  FIRST     PICTURE  X(10).
             10  LAST      PICTURE  X(10).
         04  EMPLOYEE-ADDRESS.
             08  STREET    PICTURE  X(10).
             08  CITY      PICTURE  X(10).

04 は 05 より小さいため、EMPLOYEE-NAME の下になりませんが、他方 01 より大きいため、EMPLOYEE-RECORD の下になります。 04 の代わりに 07 を使うと、EMPLOYEE-ADDRESS は EMPLOYEE-NAME の下になります (これは、この例では望ましくありません)。

このようなコーディングは推奨されません。 また、この拡張機能は互換性のためだけに提供されています。

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

概念例

図 4 はこの概念を表したものです。 レベル 01 の記入項目に直接従属するグループは、すべて同一のレベル番号をもっていることに注意してください。 またあるサブグループの基本項目と別のサブグループの基本項目は必ずしも同じレベル番号をもっていないこと、基本項目は階層内のどのレベルでも指定することができることに注意してください。

図 4. レコード記述のレベル

REQTEXT

特殊なレベル番号

特別なレベル番号は、レコードの構造を作らない項目を識別します。特別レベル番号は次のとおりです。

 66 
RENAMES 文節しか入れてはならない項目を識別します。 このような項目は、すでに定義されているデータ項目をグループ化し直します。 (詳しくは RENAMES 文節を参照してください。)
 77 
作業用ストレージ・セクション、ローカル・ストレージ・セクションまたはリンケージ・セクションの独立した項目 (他の項目の構成部分ではなく、それ自体分割されていないもの) であるデータ項目記述記入項目を識別します。 レベル 77 の項目は区域 A から始めなければなりません。
 88 
条件変数の特定の特定の値と結び付いている任意の条件名記入項目を識別します。 条件名記入項目には、VALUE 文節しか入れてはなりません。 (詳しくは VALUE 文節を参照してください。)

注:
プログラム内で参照される、作業用ストレージ・セクション、ローカル・ストレージ・セクションおよびリンケージ・セクション内のレベル 77 記入項目およびレベル 01 記入項目には、固有のデータ名を付けなければなりません。 なぜなら、どちらも修飾することができないからです。 プログラム内で参照される従属データ名は、固有名として定義するか、あるいは修飾によって固有名にしておく必要があります。 参照されないデータ名は固有に定義する必要はありません。

字下げ

連続するデータ記述記入項目は、先行する記入項目と同じ列で始めることも、字下げすることもできます。 字下げは、文書化するときに役立ちますが、コンパイラーの処理には影響を及ぼしません。


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