前ページへ データ部 データ部 - 画面節 次ページへ

第8章: データ部 - データ記述

8.1 データ記述

8.1.1 データ記述

8.1.1.1 データ記述項の全体的な骨組み

機能

データ記述項は、個々のデータ項目の特徴を指定する。

またはプログラマが定義したデータ型の特徴を記述して、複数のデータ項目の記述を指定するのに使用する。

作業場所節またはファイル節内の01レベルのデータ記述項によって、データ・レコードおよびその下位のデータ項目に局所名(local name)または大域名(global name)が含まれるか否かが決まる。

作業場所節内の01レベルのデータ記述によって、データ・レコードとその下位のデータ項目の内部属性または外部属性が決まる。

一般形式

書き方 1
書き方 2
書き方 3
書き方 4

構文規則

  1. 書き方1では、レベル番号は01から49までのどれか、または77とする。

  2. 原則として、各句をどんな順序で書いてもよい。ただし、例外が2つある。データ1またはFILLER(無名項目)句

    を指定するとき

    は、それらはレベル番号の直後に書く。REDEFINES(再定義)句を指定するときは、データ名-1またはFILLER句

    が指定してあれば 直後に書く。指定がなければ、レベル番号の直後に書く。

  3. 各基本項目に対して PICTURE(形式)句を指定する。
    ただし、
    • 指標データ項目(index data item)、
    • オブジェクト参照、
    • 手続きポインタ、
    • ポインタ、
    • 内部浮動小数点数データ項目 - USAGE COMPUTATIONAL-1か、 COMPUTATIONAL-2か、 FLOAT-SHORTか、 FLOAT-LONG

    は例外とする。それらに対しては、PICTURE句を指定することは禁止されている。

  4. THRUとTHROUGHは同義語であり、どちらを書いてもよい。

  5. EXTERNAL句を指定できるのは、作業場所節内の01レベルのデータ記述項の中だけである。

  6. EXTERNAL句とREDEFINES句は、同じデータ記述項の中には指定できない。

  7. GLOBAL(大域)句は、01レベルのデータ記述項の中でだけ指定できる。

  8. GLOBAL句またはEXTERNAL句を含む記述項、またはGLOBAL句またはEXTERNAL句を含むファイル記述項に関連するレコード記述に対しては、データ各-1を指定する。

  9. TYPEDEF句は、レベル番号01のデータ記述項にだけ記述できる。

  10. TYPEDEF句は、データ名-1が記述されている時にだけ使用できる。他の語では、明示的または暗黙的な FILLER句のデータ記述項と同じものを使用できない。

    TYPEDEF句を集団項目に対して指定した場合、従属するデータ記述は明示的または暗黙的なFILLER句で定義できるので注意が必要である。

  11. SYNCHRONIZED句、PICTURE句、 JUSTIFIED句、 BLANK WHEN ZERO の各句は、基本データ項目以外には指定できない。

    SYNCHRONIZED句は、集団項目に指定できる。

  12. 定数-5と整数-1は、浮動点小数値あるいは負数の値であってはならず、18桁を超えてはならない。

  13. 定数-5が式の一部として使用されている場合、整数でなければならない。

  14. データ名-2およびデータ名-3は、暗黙的に修飾できる。
  15. VALUE句は、字類が指標、オブジェクト、ポインタのデータ項目には指定できない。

一般規則

  1. 書き方3は、条件名(condition-name)に適用する。 各条件名は レベル番号が88の記述項に別々に定義する必要がある。ここに、条件名とそれに対応する単独の値またはいくつかの値または値の範囲を指定する。条件変数(condition variable)に対する条件名記述項は、条件名が関連する項目の記述項の直後に書く。条件名は原則として、レベル番号を含む任意のデータ記述項に関連付けることができる。ただし、下記のものを除く。

    1. 他の条件名

    2. 66レベルの項目

    3. JUSTIFIED, SYNCHRONIZED, USAGE(USAGE IS DISPLAYを除く)を含む記述項を伴う項目を含む集団項目

    4. 指標データ項目

      またはポインタ・データ項目

      (USAGE IS INDEX句の節を参照。)

    5. 定数名

  2. 条件名を、内部浮動小数点数項目と関連付けることができる。

    条件名を、外部浮動小数点数項目と関連付けることができる。

  3. 書き方4では、定数名を定義する。定数名(constant-name)とは、定数値を表わす記号名である。COBOLシステムは定数名を対応する値で置き換える。

  4. TYPEDEF句を使用すると、基本データ記述の集団を型定義として宣言できる。そして、USAGE句内でデータ名-1を型定義名-1として使用して、そのデータ記述のインスタンスを宣言できる。型定義自体は記憶領域を割り当てられたデータ項目ではない。

  5. TYPEDEF句を集団のレベルで指定した場合、その型の任意のデータ項目に関してその型定義の構成要素が暗黙的に宣言される。その構成要素を参照するには、データ項目の修飾に関するCOBOLの通常の規則を適用する。

8.1.1.2 BLANK WHEN ZERO(ゼロならば空白)句

機能

BLANK WHEN ZERO(ゼロならば空白)句は、項目の値がゼロのときにそれを空白に変える。

一般形式

構文規則

  1. BLANK WHEN ZERO句を指定できるのは、PICTUREが数字(明示的または暗黙的にUSAGE IS DISPLAYを伴う)または数字編集であると指定されている基本項目だけである。(後述のPICTURE句を参照。)

  2. ゼロ抑制記号としての星印(*)とBLANK WHEN ZEROは、同じ記述項の中には指定できない。

    両方を同時に指定してもよい。ただし、ゼロ抑制の方がBLANK WHEN ZERO句に優先する。

一般規則

  1. BLANK WHEN ZERO句を指定すると、その項目の値がゼロのとき、その内容はまったくの空白となる。

  2. PICTURE(形式)が数字を表わす項目にBLANK WHEN ZERO句を指定すると、その項目の項類は数字編集とみなされる。

8.1.1.3 BLOCK CONTAINS(ブロックの大きさ)句

機能

BLOCK CONTAINS句は物理レコードの大きさを指定する。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、この機能は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの句を使用するべきではない。

一般形式

一般規則

  1. BLOCK CONTAINS句は注記になる。

8.1.1.4 CODE-SET(符号系)句

機能

CODE-SET句は外部媒体上のデータを表現するために使用される符号系を指定する。

CODE-SET句を指定できるのは、レコード順編成

および行順編成の

ファイルに対してだけである。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、この機能は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの句を使用するべきではない。

一般形式

指令

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

構文規則

  1. あるファイルにCODE-SET句を指定した場合、そのファイル中のすべてのデータ項目の用途をDISPLAYと記述し、符号付き数字データがあればSIGN IS SEPARATE句を記述する。

    上記の制限は適用しない。

  2. CODE-SET句によって参照される符号系名句には、定数を指定できない。

    上記の制限は適用しない。

  3. 一意名-1は修飾してもよいが、添字は付けられない。

  4. 各一意名-1は、該当するファイルのレコード記述中に記述したデータ項目とする。しかし、それ自体がレコード記述であってはならない。すべての一意名-1は、同じレコード記述内に含まれていなければならない。

  5. FORを指定すると、その対象のデータ項目にCODE-SET句に指定した符号系が適用される。FORを指定しないと、該当するファイル全体にCODE-SET句に指定した符号系が適用される。

  6. どのようなファイルまたはその中のデータ項目に関しても、固有の文字集合にはCODE-SET句は適用されないものと想定される。

一般規則

  1. レコード領域中のデータは、つねにASCIIコードで書かれる。特殊名段落において符号系名がEBCDICに設定されていると、CODE-SET句の影響を受けるデータは、ファイルに書かれるときにASCIIからEBCDICにコード変換される。特殊名段落において符号系名がSTANDARD-1, STANDARD-2, NATIVE, ASCIIのどれかに設定されている場合は、コード変換は必要ない。

  2. 上記のコード変換に際しては、 CODE-SET句が適用されるデータ項目はどれも英数字として扱われる。そのデータ記述に字類または項類がどのように記述されているかは考慮されない。

  3. 一意名-1にOCCURS句が指定してある場合、CODE-SET句はその最初の要素に対してだけ適用される。一意名-1の下位に属する項目にOCCURS句が指定してある場合、COSE-SET句は一意名-1全体に適用される。

8.1.1.5 DATA RECORDS(データレコード)句

機能

DATA RECORDS句は、ファイルを構成するデータレコードの名前を書き記すだけである。

ファイル記述項のDATA RECORDS句は、ANSI '85標準では廃要素に分類されており、ANSI標準の次回の全面改訂の際に、削除される予定である。

この構文は、このCOBOL処理系に組み込まれているすべての方言で全面的に使用できる。FLAGSTD指令を使用すると、この構文が使われているすべての箇所を見つけ出すことができる。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、この機能は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの句を使用するべきではない。

一般形式

構文規則

  1. データ名-1およびデータ名-2は、データレコードの名前である。これと同じ名前で、レベル番号が01のレコード記述を書く。

    これらのデータ名は、プログラム中のデータ記述項と対応する必要はない。

一般規則

  1. データ名を複数指定することは、ファイル中にデータレコードの型が複数あることを意味する。各型のレコードは、大きさや形式などが異なっていてよい。このデータ名を書く順序には意味はない。

    注: FD中で複数の01レベル項目の使用時に、SELECT文がキー定義を含んでいる場合、キーの大きさは、そのFDの最小レコード長の範囲内になければならない。


  2. 概念的には、 1つのファイル内のデータレコードは、すべて同じ領域を共有する。ファイル内に複数の型のデータレコードが存在する場合でも、そのことは何ら変わらない。

8.1.1.6 データ名およびFILLER句

機能

データ名(data-name)は、記述する対象のデータの名前を表わす。語FILLERは、レコード中の明示的に参照しない基本項目を指定するために使用する。

一般形式

構文規則

  1. データ名または必要語FILLER

    のどちらかを指定する場合、

    データ記述項のレベル番号の直後に書く。

一般規則

  1. 必要語FILLERは、レコード中の基本項目または集団項目の名前として使用できる。どのような場合でも、FILLER項目は明示的に参照できない。しかし、必要語FILLERを条件変数として使用することはできる。この場合は、FILLER項目を明示的に参照するのではなく、その値を参照するだけだからである。

  2. この句を省略すると、記述対象の項目はFILLERを指定したように扱われる。

8.1.1.7 EXTERNAL(外部)句

機能

EXTERNAL(外部)句は、データ項目またはファイル結合子に外部属性を指定する。外部データ・レコードを構成するデータ項目および集団項目は、そのレコードを記述している実行単位に含まれるすべての実行時要素 から利用できる。

一般形式

構文規則

  1. EXTERNAL句を指定できる場所は、ファイル記述項と作業場所節内のレコード記述項だけである。

  2. 同じ原始要素内で、EXTERNAL句を含む項目の外部化した名前は、EXTERNAL句を含む他の項目の外部化された名前とは異なるものにする。

  3. EXTERNAL句が含まれるデータ記述項またはその下位のデータ記述項内では、VALUE句は指定できない。そのようなデータ記述項と関連する条件名記述項には、VALUE句を指定できる。

  4. 定数-1は文字または各国語型とし、表意定数としてはならない。
  5. EXTERNAL句は字類オブジェクトのデータ項目用に指定してはならない。

一般規則

  1. データ名句によって名付けられたレコード中に含まれるデータは、外部用である。このデータは、それを記述している実行単位に含まれるすべての実行時要素から呼び出して処理できる。このデータを再定義してもよい。ただし、下記の一般規則に従う必要がある。

  2. 実行単位に含まれる2つ以上の原始要素 において同じ外部データ・レコードを記述する場合、関連するレコード記述項の各レコード名が同じであり、かつ各レコードに含まれる標準データ形式の文字数も同じでなければならない。しかし、外部レコードを記述する原始要素 にREDEFINES(再定義)句を含むデータ記述項を記述して、外部レコード全体を再定義することができる。この再定義は、同じ実行単位の中の別々の原始要素で同じにする必要はない。 REDEFINES句を参照。

  3. EXTERNAL句を指定することは、関連するファイル名またはデータ名が大域名であることを意味するわけではない。後述のGLOBAL句を参照。

  4. この記述項に関連するファイル結合子は、外部ファイル結合子である。

  5. EXTERNAL属性を持つファイルの詳細については、ファイル処理に関するCOBOLシステムのマニュアルを参照。

  6. 定数-1は外部データ項目またはファイル結合子の外部名を定義する。同じ外部データ項目またはファイル結合子を参照するすべての原始要素で、 同じ外部名を使用しなければならない。

8.1.1.8 GLOBAL(大域)句

機能

GLOBAL(大域)句は、データ名やファイル名や報告書名が大域名であることを指定する。大域名は、それを定義しているプログラムに含まれるすべてのプログラムで利用できる。

一般形式

構文規則

  1. GLOBAL句を指定できる場所は、ファイル節または作業場所節内の01レベルのデータ記述項、ファイル記述項、報告書記述項だけである。

    連絡節においても、GLOBAL句を指定できる。

  2. 同じデータ部内では、同じ名前の2つのデータ項目のデータ記述項にはGLOBAL句を指定できない。

  3. いくつかのファイルにSAME RECORD AREA(レコード領域の共用)句を指定した場合、それらのレコード記述項またはファイル記述項にはGLOBAL句を指定できない。

一般規則

  1. GLOBAL句を使用して記述したデータ名、ファイル名、報告書名は大域名である。ある大域名の下位に属するデータ名もすべて大域名となる。大域名と関連する条件名もすべて大域名となる。

  2. 大域名を定義しているプログラムの中に直接的または間接的に含まれるプログラムからは、その名前を再度定義することなく、参照できる。COBOL言語の概念の章の名前の適用範囲を参照。

  3. REDEFINES句が含まれるデータ記述項の中でGLOBAL句を使用した場合、そのGLOBAL句は大域属性をもつREDEFINESだけの対象となる。

8.1.1.9 JUSTIFIED(桁寄せ)句

機能

JUSTIFIED(桁寄せ)句は、受取り側データ項目における標準的でない桁寄せを指定する。

一般形式

構文規則

  1. JUSTIFIED句は、基本項目にだけ指定できる。

  2. JUSTは、JUSTIFIEDの省略形である。

  3. 数字項目または編集を指定した項目には、JUSTIFIED句を指定できない。

  4. 指標データ項目(後述のUSAGE IS INDEX句を参照)

    またはポインタ・データ項目には、 JUSTIFIED句を指定できない。

  5. 外部浮動小数点数項目または内部浮動小数点数項目には、JUSTIFIED句を指定できない。

一般規則

  1. 受取り側のデータ項目にJUSTIFIED句が指定してあり、送出し側データ項目の方が受取り側データ項目よりも大きい場合、左端の文字が切り捨てられる。受取り側のデータ項目にJUSTIFIED句が指定してあり、受取り側データ項目の方が送出し側データ項目よりも大きい場合、データは右端を揃えられ左端には空白が詰められる。

    送出し側データ項目の内容は考慮されない(後部の空白は抑制されない)ので、注意する必要がある。

    たとえば、PIC X(4)のデータ項目があり、その値が"A   "(Aの後ろに空白が3つ) であるとする。これを、PIC X(6)JUSTIFIEDのデータ項目に転記すると、結果は"  A   "となる。同じデータ項目をPIC X(3)JUSTIFIEDのデータ項目に転記すると、左端の文字が切り落とされて、結果は"   "(空白が3つ)となる。

  2. JUSTIFIED句を省略すると、基本データ項目にデータを収める際の標準桁寄せの規則が適用される。(COBOL言語の概念の章の標準桁寄せ規則の節を参照。)

8.1.1.10 LABEL RECORDS(ラベルレコード)句

機能

LABEL RECORDS句は、 ラベルの有無を指定する。

LABEL RECORDS句は、ANSI '85標準では廃要素に分類されており、ANSI標準の次回の全面改訂の際に、削除される予定である。

この構文は、このCOBOL処理系に組み込まれているすべての方言で全面的に使用できる。FLAGSTD指令を使用すると、この構文が使われているすべての箇所を見つけ出すことができる。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、この機能は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの句を使用するべきではない。

一般形式

構文規則

  1. 各ファイル記述項に、LABEL RECORDS句を記述する。

    LABEL RECORDS句は必要ない。

  2. データ名-1は、ラベルレコードの名前である。この名前で、01レベルのレコード記述を用意しておく。

  3. データ名-1は、該当するファイルのDATA RECORDS句には指定できない。

  4. LABEL RECORD ISとLABEL RECORDS AREはどちらも正しい構文として受け入れられる。

一般規則

  1. LABEL RECORDS句は注記にとどまる。

8.1.1.11 レベル番号

機能

レベル番号(level-number)は、レコード内のデータの階層を示す。さらに、作業場所項目、連絡項目、条件名、

, 定数名、

RENAMES(再命名)句の記述項にも、レベル番号を使用する。

一般形式

構文規則

  1. レベル番号は、各データ記述項の最初の要素として必要である。

  2. FD, CD, SDの各記述項の下位のデータ記述項のレベル番号は、 01から49、 66、

    78、

    88のどれかとする。(前述のファイル記述の節を参照。)

  3. 報告書節および画面節中のデータ記述項のレベル番号は、01から49

    または78とする。

  4. 作業場所節、

    局所記憶節、

    連絡節中のデータ記述項のレベル番号は、 01から49、66、 77、

    , 78、

    88のどれかとする。

  5. レベル番号は、1文字または2文字の数字とする。

一般規則

  1. レベル番号01は、各レコード記述の最初の記述項であることを示す。

  2. レベル階層の概念が当てはまらない記述項に、特別のレベル番号が割り当てられている。下記のものがある。

    1. レベル番号77は、独立作業場所データ項目および独立連絡データ項目を示すために使用する。このレベル番号には、先に示したデータ記述項の骨組みの書き方1だけが適用できる。

    2. レベル番号66は、RENAMES(再命名)記述項を示すために使用する。このレベル番号には、先に示したデータ記述項の骨組みの書き方2だけが適用できる。

    3. レベル番号88は、 条件変数に関連する条件名を定義する記述項を示すために使用する。このレベル番号には、先に示したデータ記述項の骨組みの書き方3 だけが適用できる。

    4. レベル番号78は、定数名を定義する記述項を示すために使用する。このレベル番号には、先に示したデータ記述項の骨組みの書き方4だけが適用できる。

  3. CD, FD, SDの各記述項の下位に属する複数の01レベルの記述項は、同じ領域を暗黙的に再定義する。

8.1.1.12 行数カウンタ

予約語のLINAGE-COUNTERは、特殊レジスタの名前である。レコード順ファイルのファイル記述項にLINAGE句を指定すると、この特殊レジスタが生成される。このレジスタには、LINAGE句中の整数-1またはデータ名-1の大きさに等しい、符号なしの整数が暗黙的にとられる。

8.1.1.13 LINAGE(行数)句

機能

LINAGE句を指定することによって、利用者は論理ページの行数を設定できる。利用者はまた、論理ページ上の上下の余白(top margin, bottom margin)およびページ本体(page body)中の脚書領域(footing area)の開始行を指定することもできる。

LINAGE句を指定することができるのは、レコード順編成のファイルに対してだけである。

一般形式

構文規則

  1. データ名-1、データ名-2、データ名-3、データ名-4は、符号なしの基本整数データ項目とする。

  2. 整数-1の値は、ゼロより大きくする。

  3. 整数-2の値は、整数-1の値を超えてはならない。

  4. 整数-3および整数-4の値は、ゼロであってもよい。

一般規則

  1. LINAGE句を指定することによって、利用者は論理ページの行数を設定できる。論理ページの大きさは、FOOTING指定を除く各指定値の和である。 FOOTINGを指定しないと、脚書機能は組み込まれず、 ページあふれ条件(page overflow condition)とは別のページの終わり条件(end-of-page condition)は発生しない。

    論理ページと物理ページの大きさの間には、必ずしも関係がある必要はない。

  2. 整数-1またはデータ名-1のデータ項目の値は、論理ページ上に書いたり改行したりできる行数を表わす。この値はゼロよりも大きくする。論理ページ上の書いたり改行したりできるこの部分を、ページ本体と呼ぶ。

  3. 整数-2またはデータ名-2のデータ項目の値は、論理ページ上の脚書領域の開始行を表わす。この値はゼロよりも大きく、かつ整数-1またはデータ名-1のデータ項目の値を超えてはならない。

    脚書領域となるのは、整数-2またはデータ名-2のデータ項目の値以上、整数-1またはデータ名-1のデータ項目の値以下の、論理ページ中の行の部分である。

  4. 整数-3またはデータ名-3のデータ項目の値は、論理ページ上の上の余白行数を表わす。この値はゼロでもよい。

    整数-4またはデータ名-4のデータ項目の値は、論理ページ上の下の余白行数を表わす。この値はゼロでもよい。

  5. 整数-1と整数-3と整数-4を指定すると、OPEN文を用いて該当ファイルを出力モードで開いたときに、これらの値に基づいて論理ページの各構成部分の行数が設定される。整数-2を指定すると、その値に基づいて脚書領域が決定される。これらの値はすべて、該当実行時要素が実行される間、ファイルに書き込まれる論理ページを制御するために使用される。

  6. データ名-1、データ名-3、データ名-4を指定すると、OPEN文を用いて該当ファイルを出力モードで開いたときに、これらの値に基づいて最初の論理ページの各構成部分の行数が設定される。

    データ名-2を指定すると、OPEN文を用いて該当ファイルを出力モードで開いたときに、この値に基づいて最初の論理ページの脚書領域が決定される。

  7. LINAGE句を指定すると、LINAGE-COUNTERが生成される。 LINAGE-COUNTERの値は、どの時点でも、現在のページ本体の中で次に書き込まれる行番号を表わしている。LINAGE-COUNTERには下記の規則が適用される。

    1. ファイル節中のファイル記述項にLINAGE句を指定した各ファイルごとに、別々のLINAGE-COUNTERが設定される。

    2. 手続き部の文によって、LINAGE-COUNTERを参照することはできるが、変更することはできない。1つの原始要素中に複数のLINAGE-COUNTERが存在することがあるので、必要に応じて、ファイル名でLINAGE-COUNTERを修飾しなければならないことがある。

  8. 各論理ページは、次の論理ページと間を空けることなく連なっている。

  9. ADVANCING PAGE指定のあるWRITE文を実行したとき、またはページあふれ条件が発生したとき(後述のWRITE文の節を参照) 、各データ項目の値に基づいて、次の論理ページを構成する各部分の行数が決定される。

  10. データ名-2を指定すると、ADVANCING PAGE指定のあるWRITE文を実行したとき、またはページあふれ条件が発生したとき、その値に基づいて、次の論理ページの脚書領域が決定される。

  11. 該当するファイルに対してWRITE文を実行すると、下記の規則に従って、LINAGE-COUNTERは自動的に更新される。

  12. ファイルに対してOPEN文を実行すると、対応するLINAGE-COUNTERの値は自動的に1に設定される。

8.1.1.14 OCCURS(反復)句

機能

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

一般形式

書き方1
書き方2

指令

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

構文規則

  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句が含まれるデータ記述項の後ろに、その下位に属さないデータ記述項を続けることができる。その記述項がそのレコード内で占める位置は、 DEPENDING ON指定によって参照されるデータ項目の実行時の値によって変わる。

    ただし、NOODOSLIDEシステム指令を設定した場合は例外である。この場合は、データ名-1の値にかかわらず、そのレコードに含まれる要素は常に最大の回数だけ反復されるものとみなされる。 ODOSLIDEシステム指令を設定した場合は、

    表の後ろに続く表に属さない一意名によって参照される位置は、データ名-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句自体は反復しては使用されない。(条件名以外のデータ記述項

    定数名以外のデータ記述項の一般規則20の制限事項を参照。)

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

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

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

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

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

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

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

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

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

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

8.1.1.15 PICTURE(形式)句

機能

PICTURE(形式)句は、基本項目の一般的性質と編集の形式を示す。

一般形式

指令

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

    • INTLEVEL - 方言がMFのときに、数字データ項目に許される最大の長さを決定する。

構文規則

  1. PICTURE句は、基本項目にだけ指定できる。

  2. 文字列は、COBOL文字集合(character set)に含まれる文字を記号として用い、一定の規則に従って組み合わせたものである。この組合わせによって、基本項目の項類が決まる。

  3. 文字列の長さは、最大30字である。

  4. PICTURE句は、RENAMES(再命名)句の左辺に指定してはならない。

  5. PICは、PICTUREの省略形である。

  6. ゼロ抑制記号としての星印(*)とBLANK WHEN ZERO句は、同じ記述項に指定できない。

    ゼロ抑制記号としての星印(*)とBLANK WHEN ZERO句を同じ記述項に指定してもよい。ただし、ゼロ抑制の方がBLANK WHEN ZERO句に優先する。

  7. 1文字に続けて、整数をかっこで囲んで指定すると、その文字を整数の値分の数だけ並べることを意味する。

一般規則

PICTURE句に書けるデータは、6種類の項類に分かれる。英字、数字、英数字、英数字編集、数字編集、

内部浮動小数点数

である。以下に、各項類ごとに分けて一般規則を記す。

英字(alphabetic)項目に関する規則

  1. PICTURE文字列に書ける記号文字は、"A"と"B"だけである。

    PICTURE文字列に書ける記号文字は、"A"だけである。

  2. 標準データ形式で表わした場合、その内容は1つ以上の英字とする。

数字(numeric)項目に関する規則

  1. PICTURE文字列に書ける記号文字は、"9","P", "S", "V"だけである。 PICTURE文字列で表わせる桁数は、1以上18以内である。 PICTURE文字列で表わせる桁数は、31までである。 PICTURE文字列で表わせる桁数は、38までである。

  2. 符号を付けない場合、標準データ形式のデータはアラビア数字の"0", "1", "2", "3", "4", "5", "6", "7", "8", "9" を組み合わせたものとする。符号を付ける場合は、上記の数字の他に、"+", "-" およびその他の演算記号を含めることができる。(後述のSIGN句の節を参照。)

数字データは、標準データ形式以外の形式でも保持できる。(後述のUSAGE文の節、および COBOL言語の概念の章の文字の表現と基数の選定の節を参照。)

英数字(alphanumeric)項目に関する規則

  1. PICTURE文字列に書ける記号文字は、 "A", "X", "9" だけである。結果的には、記号文字をすべて"X" と書いたように扱われる。PICTURE文字列に含まれる記号文字がすべて"A"または"9"である場合、英数字項目にならない。

  2. 標準データ形式で表わした場合、その内容は計算機の文字集合の任意の文字を含んでいてよい。

英数字編集(alphanumeric edited)項目に関する規則

  1. PICTURE文字列に書ける記号文字は、 "A", "X", " 9", "B", "0", "/" を一定の規則に従って組み合わせたものに限られる。その規則は下記の通り。

    1. PICTURE文字列には、最低1つの "B"と最低1つの"X" 、または最低1つの "0" (ゼロ)と最低1つの"X" 、または最低1つの"/" (斜線)と最低1つの"X" を含ませる。または、

    2. PICTURE文字列には、最低1つの"0" (ゼロ)と最低1つの"A" 、または最低1つの"/" (斜線)と最低1つの"A" を含ませる。

  2. 標準データ形式で表わした場合、その内容は計算機の文字集合の所定の文字を含むことができる。

数字編集(numeric edited)項目に関する規則

  1. PICTURE文字列に書ける記号文字は、"B", "/", "P", "V" , "Z", "0", "9", ",", ".", "*", "+", "-", "CR", "DB", 通貨記号を、一定の規則に従って組み合わせたものに限られる。許容される記号文字の組合わせは、記号の優先順位によって決まる。その規則は下記の通り。

    1. PICTURE文字列で表わせる桁数は、1以上18以内である。 PICTURE文字列で表わせる桁数は、31までである。 PICTURE文字列で表わせる桁数は、38までである。

    2. PICTURE文字列には、最低1つの"0" , "B", "/", "Z", "*", "+", ",", ".", "-", "CR" , "DB", 通貨記号を含ませる。

  2. 標準データ形式で表わした場合、その内容は1つの数値とする。

  3. PICTURE文字列のすべての桁位置が挿入文字によって表わされている場合、少なくとも1つの文字を小数点の左側に置く。

外部浮動小数点数

  1. PICTURE文字列は、下記の形式にする。

    仮数部(mantissa)および指数部(exponent)の前に、符号文字を置く。

    "+" 符号は、出力値が正であれば正号が付けられ、出力値が負であれば負号が付けられることを表わす。

    "-" 符号は、出力値が正であれば符号は空白とされ、出力値が負であれば負号が付けられることを表わす。

    各符号は、1バイトの記憶域を占める。

    仮数部

    仮数部には、下記の記号を含めることができる。

    9 . V

    実小数点は "."で表わし、想定小数点は "V"で表わす。仮数部には実小数点または想定小数点のどちらかがなければならない。小数点は左端にあっても、中間にあっても、右端にあってもよい。仮数部の長さは1桁以上16桁以下である。

    E

    指数を示す。

    指数部

    指数部は、PIC "99" の形式にする。

  2. 外部浮動小数点数項目には、OCCURS, REDEFINES, RENAMESの各句を指定できる。

  3. SIGN句は、注記としてだけ使用するものであり、符号の表現には影響しない。

  4. SYNCHRONIZED句は、注記としてだけ使用する。

  5. 外部浮動小数点数に関しては、下記の句は指定できない。

    BLANK WHEN ZERO
    JUSTIFIED
    VALUE

基本項目の大きさ

基本項目の大きさとは、 標準データ形式で表わしたときの、基本項目の文字数をいう。基本項目の大きさは、 文字位置を表わすのに使用できる記号の数によって決定される。記号文字 "A", ",", "X" , "9", "P", "Z", "*", "B", "/", "0", "+", "-", または通貨記号の後ろにかっこで囲んで書いた整数は、それらの記号を連続して並べる数を示す。 次の記号文字はPICTURE文字列内には1つしか書けないことに注意。"S", "V", ".",

"E",

"C R", "D B"

使用する記号

基本項目を表わすために使用する記号の働きを、以下に説明する。

A PICTURE文字列中の各 "A" は、1文字の英字または1つの空白だけを含むことのできる文字位置を表わす。
B PICTURE文字列中の各"B" は、空白文字を挿入できる文字位置を表わす。
E 外部浮動小数点数項目の指数部の始まりを示す。指数部は、実行時に1バイトの記憶域を占める。
P PICTURE文字列中の各"P" は、想定小数点の位置を合わせるための位取りを表わすものである。データ項目中に現れる位の中に小数点が含まれていないときに、想定小数点の位置を指定するために使用する。位取り文字である "P" は、データ項目の大きさには数えられない。数字編集項目または数字項目の最大桁数(18桁)を判定する際には、位取り文字は数に入れられる。この"P" は、PICTURE文字列の左端または右端に連続してだけ書くことができる。これは、"P" は想定小数点の位置を暗示するからである。つまり、PICTURE文字列の左端に "P" がある場合はその左に想定小数点があることになり、PICTURE文字列の右端に"P" がある場合はその右に想定小数点があることになる。"P"を含むPICTURE文字列の左端または右端に想定小数点記号の "V" を書くことは、定義の重複である。

"P" と挿入文字の"." 小数点)を、同一のPICTURE文字列に含めてはならない。データ項目の内部表現をあるものから別のものへ変換するときに、対象のデータ項目のPICTURE文字列に "P" が含まれていると、各"P" の位置に値ゼロが入っているものとみなされ、データ項目の大きさにはその桁位置も含まれる。

PICTURE文字列に記号 "P" が含まれるデータ項目を参照する処理で用いられるのは、そのデータ項目の実際の文字表現ではなく、そのデータ項目の代数値である。この代数値は、"P" の配置によって示される位置に小数点を想定し、各"P" をゼロで置き換えたものである。このデータ項目の大きさは、PICTURE文字列によって表わされる桁数となる。このような処理が行われる事例は下記のとおり。

  1. 数字の送出し側作用対象を必要とする処理

  2. 送出し側の作用対象が数字であり、そのPICTURE文字列に記号文字 "P"が含まれる場合の、基本MOVE(転記)文

  3. 送出し側の作用対象が数字編集であり、そのPICTURE文字列に記号文字"P" が含まれ、受取り側の作用対象が数字または数字編集である場合の、MOVE文

  4. 両方の作用対象が数字である場合の比較処理

上記以外のすべての処理では、記号文字 "P" は無視され、作用対象の大きさに含められない。

S PICTURE文字列中の"S" は、演算符号の存在を示す。しかし、演算符号の表現形式や位置までも示すものではない。"S"はPICTURE文字列の左端に書く。この記号文字は標準データ形式で数えた基本項目の大きさには含まれない。ただし、その記述項にSEPARATE CHARACTER句を指定した場合は、"S" は項目の大きさに含められる。(この章のSIGN句の節を参照。)
V PICTURE文字列中の "V" は想定小数点の位置を示す。この記号文字は1つのPICTURE文字列には1つだけ書ける。"V" は文字位置を表わすわけではないので、基本項目の大きさには含まれない。想定小数点がPICTURE文字列の右端の文字の右側にある場合は、"V" を書いても書かなくてもよい。
X PICTURE文字列中の各"X" は、1個の文字の位置を示す。そこには、計算機文字集合で許される任意の文字を含めることができる。
Z PICTURE文字列中の各 "Z" は、先行ゼロ列のゼロを空白に置き換えることを示す。"Z" は項目の大きさに含められる。
9 PICTURE文字列中の各 "9" は、数字を含む1個の桁位置を示す。"9" は項目の大きさに含められる。
0 PICTURE文字列中の各 "0" (ゼロ) は、数字のゼロを挿入すべき1個の桁位置を示す。"0" は項目の大きさに含められる。
/ PICTURE文字列中の各"/"(斜線)は、文字"/"を挿入すべき1個の桁位置を示す。 "/" は項目の大きさに含められる。
, PICTURE文字列中の各"," (コンマ)は、文字"," を挿入すべき1個の桁位置を示す。"," は項目の大きさに含められる。PICTURE文字列の最後には置けない。

挿入文字 "," を、PICTURE文字列の最後に置いてもよい。

. PICTURE文字列中に現れる文字"." (終止符)は、編集記号であり、桁合わせの基準とする小数点の位置を表わすとともに、文字"." を挿入する位置を表わす。"." は項目の大きさに含められる。特殊名段落にDECIMAL-POINT IS COMMAを指定すると、原始単位における終止符とコンマの機能が入れ替えられる。この場合、PICTURE句の中の終止符とコンマに関しても、終止符に関する規則がコンマに適用され、コンマに関する規則が終止符に適用される。挿入文字 " ." は、PICTURE文字列の最後には置けない。

挿入文字 "." を、PICTURE文字列の最後に置いてもよい。

+, -, CR, DB これらの記号文字は符号編集用文字であり、符号編集用文字を置く位置を示す。1つのPICTURE文字列の中では、これらの記号文字のうちのどれか1つだけ使える。これらの文字は項目の大きさに含められる。
* PICTURE文字列中の各"*" (星印)は、先行ゼロ列のゼロを星印に置き換えることを示す。"*" は項目の大きさに含められる。
通貨編集用文字 PICTURE文字列中の通貨編集用文字は、通貨編集文字を収める1個の文字位置を示す。通貨編集用文字は、通貨記号または特殊名段落にCURRENCY SIGN句で指定した1文字で表わされる。通貨編集用文字は、項目の大きさに含められる。 CURRENCYコンパイラ指令は、使用する通貨記号に影響を与える。

編集規則

 PICTURE句の中で指定できる編集方法は、 挿入と ゼロ抑制の2通りある。挿入編集には下記の4種類がある。

  1. 単純挿入(simple insertion)

  2. 特殊挿入(special insertion)

  3. 固定挿入(fixed insertion)

  4. 浮動挿入(floating insertion)

ゼロ抑制編集には下記の2種類がある。

  1. 空白によるゼロ抑制

  2. 星印(*)によるゼロ抑制

項目に行える編集の種類は、その項類によって異なる。表8-1 にその関係を示す。

表 8-1: データの項類に適用できる編集の種類

項類 編集の種類
英字 "B" による単純挿入だけ1
数字 なし
英数字 なし
英数字編集 "0", "B" "/"による単純挿入
数字編集 すべて2
2バイト文字 単純挿入
外部浮動小数点数 特殊挿入


注:

  1. ANSI '74標準では、"A" と"B" の両方が含まれるPICTURE句は英字に対する単純挿入として扱われていた。ANSI '85標準では英字に対する "B" を認めなくなり、両方が含まれるPICTURE句は、英数字編集に対する単純挿入として扱われるようになった。

  2. 1つのPICTURE句の中に、浮動挿入編集とゼロ抑制編集を同時に指定することはできない。1つのPICTURE句の中には、1種類のゼロ抑制だけを指定できる。

単純挿入編集

"," (コンマ), "B" (空白), "0" (ゼロ), " /" (斜線)は、挿入文字として使用される。挿入文字は項目中に文字を挿入すべき位置を表わし、項目の大きさに含められる。

特殊挿入編集

この種の編集は、数字編集項目または外部浮動小数点数項目に対して使用できる。

"." (終止符)は、 は挿入文字として使用されるとともに、桁合わせの基準となる小数点を表わすためにも使用される。実小数点用に使用される挿入文字は、項目の大きさに含められる。同じPICTURE文字列の中に、記号文字"V" で表わされる想定小数点と、この挿入文字で表わされる実小数点を指定することはできない。特殊挿入編集を施すと、PICTURE文字列中に指定した位置に、指定した挿入文字が挿入される。

固定挿入編集

通貨編集用文字および符号編集用文字の"+" ,"-", "CR", "DB" は、挿入文字である。1つのPICTURE文字列の中では、1つの通貨編集用文字と、符号編集用文字のどれか1つだけを使用できる。符号編集用文字の "CR" または "DB" を使用する場合は、文字列の右端に置く。これらの符号編集用文字は項目の大きさとしては2文字分に数えられる。符号編集用文字の"+" または "-" を使用する場合は、文字列の右端または左端に置く。これらの符号編集用文字は項目の大きさとして数えられる。通貨編集用記号は、文字列の左端に置く。

表 8-2 : PICTURE 文字列における編集用記号

PICTURE句の文字列中の編集用記号 編集の結果挿入される文字
データ項目の値が正またはゼロ データ項目の値が負
+ + -
- 空白1個 -
CR 空白2個 CR
DB 空白2個 DB

浮動挿入編集

通貨編集用文字および符号編集用文字の"+"と"-" は浮動挿入文字である。これらの文字を、1つのPICTURE文字列に同時に指定することはできない。

浮動挿入編集を行うには、PICTURE文字列中に浮動挿入文字を2つ以上指定する。浮動挿入文字列の間または右隣に、単純挿入文字を書くことができる。それらの単純挿入文字は、浮動挿入文字列の一部となる。

 浮動挿入文字に通貨編集用文字を使用した場合、その浮動挿入文字列の右隣に符号編集用文字の"+", "-", "CR" ,"DB" のどれか1つを書くことができる。

浮動挿入文字列の左右両端の文字はそれぞれ、データ項目中で浮動する記号の左右の限界を示す。

左端から2番目の浮動文字は、そのデータ項目の中で数字データを収めることができる左側の限界を示す。それ以降右側の浮動文字は、ゼロでない数字で置き換えられる。

PICTURE文字列の中では、浮動挿入文字を表わす方法は2通りである。1つは、小数点の左側の数字列の先頭の一部または全部を、挿入文字で書く方法である。もう1つは、PICTURE文字列の中のすべての数字位置を、挿入文字で書く方法である。

 PICTURE文字列中の小数点の左側にだけ挿入文字を書いた場合、単一の浮動挿入文字が挿入される。その位置は、小数点のすぐ左、または挿入文字列が表わすデータのゼロでない最初の数字のすぐ左の、どちらか左よりの方となる。実際に挿入される挿入文字よりも左側の文字位置は、空白で置き換えられる。

PICTURE文字列の中のすべての数字位置を挿入文字で書いた場合、結果はデータの値によって異なる。値がゼロである場合は、そのデータ項目全体が空白で置き換えられる。値がゼロでない場合は、小数点の左側にだけ挿入文字を書いた場合と同じ結果となる。

PICTURE文字列の中のすべての数字位置を挿入文字で書いた場合、最低限1つの数字位置を、想定小数点または実小数点の左に置く。

切捨てが起こらないようにするためには、受取り側のPICTURE句の文字列の文字数を、送出し側のデータ項目の文字数に受取り側で編集するための固定挿入文字の数と浮動挿入文字のための1字とを加えたもの以上にする。

ゼロ抑制編集

数字位置の先行ゼロ列を抑制するためには、PICTURE文字列の中で英字 "Z" または "*" (星印) を使用する。1つのPICTURE文字列の中では、どちらか一方しか指定してはならない。各抑制文字は、項目の大きさに含められる。抑制文字に"Z" を指定した場合、先行ゼロ列は空白で置き換えられる。抑制文字に"*" を指定した場合、先行ゼロ列は星印で置き換えられる。

ゼロ抑制は、PICTURE文字列の中に1つ以上の抑制文字を並べて示す。この抑制文字列は、先行ゼロ列のゼロの置き換えを行おうとする先行数字位置を示す。抑制文字列の中またはそのすぐ右に書いた単純挿入文字は、その抑制文字の一部となる。

PICTURE文字列の中では、ゼロ抑制文字を表わす方法は2通りである。1つは、小数点の左側の数字列の先頭の一部または全部を、ゼロ抑制文字で書く方法である。もう1つは、PICTURE文字列の中のすべての数字位置を、ゼロ抑制文字で書く方法である。

PICTURE文字列中の小数点の左側にだけゼロ抑制文字を書いた場合、PICTURE文字列中のゼロ抑制文字に対応するデータ中の先行ゼロ列が、置換え文字によって置き換えられる。ゼロ抑制が停止される位置は、小数点またはデータ中のゼロでない最初の数字の、どちらか先に出てきた方となる。

PICTURE文字列の中のすべての数字位置をゼロ抑制文字で書いた場合、結果はデータの値によって異なる。 値がゼロでない場合は、小数点の左側にだけゼロ抑制文字を書いた場合と同じ結果となる。値がゼロである場合は、ゼロ抑制文字に"Z" を使用していれば、そのデータ項目全体は空白で置き換えられ、ゼロ抑制文字に"*" を使用していれば、そのデータ項目全体は実小数点を除いて星印で置き換えられる。

記号文字"+", "-", "*", " Z" および通貨編集用文字は、浮動置換え文字として使用するときは、1つのPICTURE文字列の中ではどれか1つだけを書く。

順序規則

PICTURE文字列の中で記号として使用するときの、文字の順序規則を表8-3に示す。"○" 印は、その列の上段に示した文字を、その行の左端に示した文字の前に書いてもよいことを示す。中かっこ{ }で囲んだ文字群は、その中の1つしか書けないことを示す。 " 通貨" は、通貨編集用文字を示す。PICTURE文字列の中には、文字 "A " , "○", "Z", " 9", "*", の少なくともどれか1つ、または記号文字"+" , "-"," 通貨" の少なくともどれか2つを書く。

表8-3の中で、固定挿入文字の"+"と"-" 、および浮動挿入文字の"Z", "*", " +","-", " 通貨", および記号文字"P" は、それぞれ2回ずつ示してある。 左の列および上の行は、小数点の左側に書く場合を表わす。右の列および下の行は、小数点の右側に書く場合を表わす。

表 8-3: PICTURE 文字列における順序規則

先行文字 固定挿入文字 浮動挿入文字 その他の文字
後続文字   B 0 / , . +
-
+
-
CR
DB
通貨 E Z
*
Z
*
+
-
+
-
通貨 通貨 9 A
S V P P G
固定挿入文字 B          
0            
/            
,              
.                          
+
-
                                             
+
-
               
CR
DB
                 
通貨                                            
E                                      
浮動挿入文字 Z
*
                               
Z
*
                       
+
-
                                 
+
-
                           
通貨                                  
通貨                            
その他の文字 9            
A
                                   
S                                              
V                      
P                      
P                                    
G                                          

8.1.1.16 PROPERTY(属性)句

機能

PROPERTY句はこのデータ項目がオブジェクトの属性であることおよび状況に応じてGETメソッドとSETメソッドのどちらか一方または両方を生成すべきことを指定する。

一般形式

構文規則

  1. PROPERTY句を指定できる場所は、ファクトリ定義またはオブジェクト定義の作業場所節だけである。

  2. OCCURS句の下位に属するデータ項目にはPROPERTY句を指定してはならない。

  3. PROPERTY句を指定できる対象は、参照の一意性を保つために名前を修飾する必要のない、基本データ項目だけである。

  4. 記述項の左辺のデータ名はスーパークラスに定義されている属性名と同じであってはならない。

注: スーパークラス内に属性名を定義できる。その方法は2通りある。ひとつは、PROPERTY指定を記述したひとつまたは一組のメソッドを定義することである。もうひとつは、PROPERTY句を指定したデータ記述項を記述することである。


一般規則

  1. GET指定を書かないと、PROPERTY句は該当のデータ項目を含むファクトリまたはオブジェクトに関するメソッドを定義する働きをする。

    その記述項の左辺の字類が指標、オブジェクト、ポインタのいずれかである場合、そのメソッドは暗黙的に下記のように定義される。

    	METHOD-ID. GET PROPERTY データ名. 
    	DATA DIVISION. 
    	LINKAGE SECTION. 
    	01 LSデータ名 データ記述. 
    	PROCEDURE DIVISION RETURNING LSデータ名. 
    	パラメータ名. 
    		SET LSデータ名 TO データ名 
    		EXIT METHOD. 
    	END METHOD. 

    その記述項の左辺の項類が英数字編集、国別編集、数字編集のいずれかである場合、そのメソッドは暗黙的に下記のように定義される。

    	METHOD-ID. GET PROPERTY データ名. 
    	DATA DIVISION. 
    	LINKAGE SECTION. 
    	01 LSデータ名 データ記述. 
    	PROCEDURE DIVISION RETURNING LSデータ名. 
    	パラメータ名. 
    		MOVE データ名 TO LSデータ名 (1:). 
    		EXIT METHOD. 
    	END METHOD. 

    注: その記述項の左辺が編集されている場合、受取り側の項目全体を部分参照したときに、そのデータに編集規則が再び適用されることはない。


    そうでない場合、このメソッドの暗黙的な定義は下記のようになる。

    	METHOD-ID. GET PROPERTY データ名. 
    	DATA DIVISION. 
    	LINKAGE SECTION. 
    	01 LSデータ名 データ記述. 
    	PROCEDURE DIVISION RETURNING LSデータ名. 
    	パラメータ名. 
    		MOVE データ名 TO LSデータ名 
    		EXIT METHOD. 
    	END METHOD. 

    ここで、LSデータ名のデータ記述には、その記述項の左辺およびその下位のデータ項目が含まれる。ただし、下記のものは例外である。

    • INDEXED BY指定
    • PROPERTY句
    • VALUE句
    • その記述項の左辺のデータ記述内のREDEFINES句

  2. SET指定を書かないと、PROPERTY句は該当のデータ項目を含むファクトリまたはオブジェクトに関するメソッドを定義する働きをする。

    その記述項の左辺の字類が指標、オブジェクト、ポインタのいずれかである場合、そのメソッドは暗黙的に下記のように定義される。

    	METHOD-ID. SET PROPERTY データ名. 
    	DATA DIVISION. 
    	LINKAGE SECTION. 
    	01 LSデータ名 データ記述. 
    	PROCEDURE DIVISION USING LSデータ名. 
    	パラメータ名. 
    		SET データ名 TO LSデータ名 
    		EXIT METHOD. 
    	END METHOD. 

    その記述項の左辺の項類が英数字編集、国別編集、数字編集のいずれかである場合、そのメソッドは暗黙的に下記のように定義される。

    	METHOD-ID. SET PROPERTY データ名. 
    	DATA DIVISION. 
    	LINKAGE SECTION. 
    	01 LSデータ名 データ記述. 
    	PROCEDURE DIVISION USING LSデータ名. 
    	パラメータ名. 
    		MOVE LSデータ名 TO データ名 (1:). 
    		EXIT METHOD. 
    	END METHOD. 

    注: その記述項の左辺が編集されている場合、受取り側の項目全体を部分参照したときに、そのデータに編集規則が再び適用されることはない。


    そうでない場合、このメソッドの暗黙的な定義は下記のようになる。

    	METHOD-ID. SET PROPERTY データ名. 
    	DATA DIVISION. 
    	LINKAGE SECTION. 
    	01 LSデータ名 データ記述. 
    	PROCEDURE DIVISION USING LSデータ名. 
    	par-name. 
    		MOVE LSデータ名 TO データ名 
    		EXIT METHOD. 
    	END METHOD. 

    ここで、LSデータ名のデータ記述には、その記述項の左辺およびその下位のデータ項目が含まれる。ただし、下記のものは例外である。

    • INDEXED BY指定
    • PROPERTY句
    • VALUE句
    • その記述項の左辺のデータ記述内のREDEFINES句

8.1.1.17 RECORD(レコードの大きさ)句

機能

RECORD句は、固定長レコード内の文字数または可変長レコード内の文字数の範囲を指定する。可変長レコードに関しては、最小文字数と最大文字数とを指定する。

固定形式のファイルおよび 可変形式のファイル の概念は、この節全体を通じて、行順ファイルには適用しない。使用するCOBOL での行順ファイルの使用についての詳細は、COBOLシステムのマニュアルを参照。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、RECORD CONTAINS句は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの句を使用するべきではない。

一般形式

書き方1

書き方2

書き方3

構文規則

書き方1
  1. 該当するファイルのレコード記述項に記述する文字数は、整数-1と同じにする。
書き方2
  1. 該当するファイルのレコード記述項に記述する文字数は、整数-2に指定する文字数より少なくても、整数-3に指定する文字数より多くてもいけない。

  2. 整数-3は、整数-2よりも大きくする。

  3. データ名-1は、作業場所節または連絡節中で符号なしの整数の基本項目として記述しておく。

一般規則

すべての書き方
  1. RECORD句を指定しないと、レコード記述項に記述する各データの大きさの和がレコードの大きさとなる。

  2. 対応するファイル結合子が外部ファイル結合子である場合、そのファイル結合子と関連する実行単位中のすべてのファイル記述項において、整数-1、整数-2、整数-3に同じ値を指定しなければならない。RECORD句を指定しない場合、そのファイル結合子に関連するレコード記述項は、すべて同じ長さにする。

  3. 行順ファイルは、固定形式ファイルでも可変形式ファイルでもない。このため、RECORDING MODE、RECORD CONTAINS、RECORD VARYING IN SIZE句のどれかを書いても書かなくても、その性能には影響しない。

書き方1
  1. 書き方1は、固定長レコードを定義するために使用する。整数-1には、ファイル中の各レコードの文字数を指定する。

書き方2
  1. 書き方2は、可変長レコードを定義するために使用する。整数-2には、ファイル中のレコードの中で最短のものの文字数を指定する。整数-3には、ファイル中のレコードの中で最長のものの文字数を指定する。

  2. レコードの文字数は、その中に含まれる基本データ項目の文字数を合計することによって決まる。ただし、再定義および再命名分を除く。また、桁詰めによって暗黙のFILLERがとられている場合は、それも数に含める。表を指定した場合は、下記のように扱われる。

    1. レコード中に記述した表要素の最小数が、上記の合計に含められて、そのレコードの最短文字数が決定される。

    2. レコード中に記述した表要素の最大数が、上記の合計に含められて、そのレコードの最長文字数が決定される。

    3. 整数-2を指定しないと、該当するファイルのレコードの最短文字数は、そのファイルのレコード用に記述した最小の文字数に等しいものとされる。

  3. 整数-3を指定しないと、該当するファイルのレコードの最長文字数は、そのファイルのレコード用に記述した最大の文字数に等しいものとされる。

  4. データ名-1を指定した場合、該当するファイルに対してRELEASE文、REWRITE文、WRITE文を実行する前に、該当するレコードの文字数をデータ名-1のデータ項目に設定する。

  5. データ名-1を指定した場合、DELETE文、RELEASE文、REWRITE文、START文、WRITE文を実行しても、データ名-1のデータ項目の内容は変わらない。READ文またはRETURN文の実行が不成功に終わった場合も、データ名-1のデータ項目の内容は変わらない。

  6. RELEASE文、REWRITE文、WRITE文を実行する間、該当するレコード中の文字数は、下記の条件によって決定される。

    1. データ名-1を指定した場合、データ名-1のデータ項目の内容によって。

    2. データ名-1を指定せず、レコードに可変反復データ項目が含まれない場合、そのレコードの文字数によって。

    3. データ名-1を指定せず、レコードに可変反復データ項目が含まれる場合、固定部分と出力文の実行時の反復数に基づく可変な表部分との和によって。

    書き出す論理レコードの文字数が、整数-2よりも少ないか整数-3よりも多いと、出力文は不成功に終わる。そして、対応する入出力状態に、その原因となった条件を示す値が設定される。ただし、RELEASE文の実行中は除く。

  7. データ名-1を指定した場合、該当するファイルに対するREAD文またはRETURN文の実行が正常に終了すると、データ名-1のデータ項目の内容は、読み込んだばかりのレコードの文字数を示すように変更される。

  8. READ文またはRETURN文の中にINTOを指定すると、暗黙のMOVE文の送出し側データ項目となる現在レコード中の文字数は、下記の条件によって決定される。

    1. データ名-1を指定した場合は、データ名-1のデータ項目の内容によって。

    2. データ名-1を指定しなかった場合は、データ名-1を指定していたならばデータ名-1のデータ項目に転記されるはずの値によって。

書き方3
  1. RECORD句の書き方3を使用すると、 整数-4が最短のデータレコードの文字数を表わし、整数-5が最長のデータレコードの文字数を表わす。しかし、この場合は、各データレコードの大きさは、レコード記述項に完全に定義されている。

  2. 各データレコードの大きさは、論理レコードを格納するのに必要な文字数で指定する。その際、論理レコード内のデータ項目を表わすために使用される文字の型は問わない。レコードの大きさは、すべての固定長の基本項目の文字数の合計に、可変長項目が含まれればその最大の文字数の合計を加えたものによって、決定される。この合計値が実際のレコードの大きさと違っていてもよい。COBOL言語の概念の章の文字の表現と基数の選定の節、およびこの章のSYNCHRONIZED句USAGE句の節を参照。

8.1.1.18 RECORDING MODE句

機能

RECORDING MODE句は、ファイル中の論理レコードの形式を指定する。

一般形式

書き方1 (レコード順ファイル)

書き方2 (行順ファイル)

書き方3 (相対ファイルおよび索引ファイル)

構文規則

  1. FとFIXEDは同義語である。

  2. V と VARIABLは同義語である。

一般規則

すべての書き方(すべてのファイル)
  1. RECORDING MODE IS Fを指定すると、ファイル中のすべてのレコードの長さが同じとなる。
書き方1 (レコード順ファイル)
  1. "U" 指定は注記になる。

書き方1と3 (レコード順ファイル、相対ファイル、索引ファイル)
  1. RECORDING MODE IS V句を指定すると、 ファイル中のレコードは固定長でも可変長でもよくなる。各データレコードに、レコード長フィールドがとられる。このレコード長フィールドは、レコード記述の一部とは扱われない。
書き方2
  1. 行順ファイルは、固定形式ファイルでも可変形式ファイルでもない。このため、RECORDING MODE、RECORD CONTAINS、RECORD VARYING IN SIZE句のどれかを書いても書かなくても、その性能には影響しない。

8.1.1.19 REDEFINES(再定義)句

機能

REDEFINES(再定義)句は、同一の計算機記憶領域を別のデータ記述項によって記述する。

一般形式

 上記のレベル番号とデータ名-1

またはFILLER  

は書き方を明確にするために示してある。レベル番号とデータ名-1

またはFILLER

は、REDEFINES句の一部を構成するわけではない。

構文規則

  1. REDEFINES句を指定するときは、データ名-1

    またはFILLERの直後に書く。

    あるいは、PICTURE句またはUSAGE句の後ろにREDEFINES句を書くことができる。 

  2. データ名-1とデータ名-2のレベル番号は、同じにする。ただし、 66,

    78,

    88は使用できない。

  3. REDEFINES句は、ファイル節内の01レベルの記述項の中では使用できない。レベル指示語のFDまたはSDの下位に属する複数の01レベルの記述項は、同じ領域を暗黙的に再定義するからである。(この章の DATA RECORDS句の節の一般規則2を参照。)

    この句を、ファイル節内の01レベルの記述項内で使用してもよい。

  4. REDEFINES句は、通信節内の01レベルの記述項の中では使用できない。レベル指示語のCDの下位に属する複数の01レベルの記述項は、同じ領域を暗黙的に再定義するからである。

  5. データ名-2のデータ記述項に、REDEFINES句が含まれていてもよい。

    データ名-2は、REDEFINES句が含まれている記述項の下位に属していてもよい。データ名-2のデータ記述項には、OCCURS句が含まれていてはならない。しかし、OCCURS句が含まれているデータ記述項の下位に、データ名-2が属していても構わない。この場合、REDEFINES句の中でデータ名-2を参照するときに、添字または指標は指定できない。元の定義および再定義のどちらも、OCCURS句で指定される可変反復データ項目を含んでいてはならない。(この章のOCCURS句の節を参照。)

    データ名-2のデータ記述項に、OCCURS句が含まれていてもよい。

    レベル番号が01の場合、元の定義と再定義は、OCCURS句で定義したサイズが可変の項目を含むことができる。

  6. データ名-2とデータ名-1のデータ記述項の間に、データ2およびデータ1のレベル番号よりも数値的に値の小さいレベル番号の記述項は置けない。

  7. 外部浮動小数点数データ項目または内部浮動小数点数データ項目を、REDEFINES句の左辺または右辺に置いてもよい。

  8. データ名-2が一意でない場合でも、データ名-2を修飾してはならない。この場合は、REDEFINES句の配置に関する規則上、データ名-2に曖昧さはないからである。

    データ名-2を修飾してもよいが、記述した修飾は無視される。

  9. 新しい文字位置の記述を与える項目は、VALUE句を持ってはならない。ただし、条件名の項目内では例外である。
  10. REDEFINES句は、字類オブジェクトのデータ項目に指定してはならない。

    REDEFINES句を、字類オブジェクトのデータ項目に指定してもよい。

  11. データ名-2は、字類オブジェクトであってはならない。

    データ名-2は、字類オブジェクトでもよい。

一般規則

  1. 再定義はデータ名-2から始まり、データ名-2のレベル番号以下のレベル番号が出てきたところで終わる。

  2. データ名-1のレベル番号が01でないときは、データ名-2によって参照されるデータ項目と同じ文字数を指定する。

    ただし、データ名-1の領域が、データ名-2の領域よりも小さくてもよい場合を除く。

    ただし、データ名-1の領域がデータ名-2の領域よりも大きくてもよい場合を除く。この場合、再定義する項目と再定義される項目の大きい方を収められるだけの記憶領域がとられる。

    REDEFINES句は記憶領域を再定義するのであって、記憶されているデータ項目を再定義するのではないことを、認識することが重要である。

  3. 同じ文字位置を、複数回、再定義できる。 再定義用の記述項は、再定義される領域を定義する記述項の直後に続ける。その間に、新しい領域を定義する記述項ははさめない。同じ領域を複数回再定義するときは、最初に領域を定義した記述項のデータ名を使用する。

    または、先行する再定義記述項のデータ名を使用してもよい。

  4. レベル指示語(FD, CD, SD)の下位に属する複数の01レベルの記述項は、同じ領域を暗黙的に再定義する。

8.1.1.20 RENAMES(再命名)句

機能

RENAMES(再命名)句は、基本項目を組み合わせて新たな集団を作る。組合わせは互いに重ね合わせることができる。

一般形式

上記のレベル番号66とデータ名-1は書き方を明確にするために示してあるだけで、レベル番号とデータ名-1はRENAMES句の一部を構成するわけではない。

構文規則

  1. 1つの論理レコードに対して書けるRENAMES記述項の数に、制限はない。

  2. 1つの論理レコード中のデータ項目を参照しているRENAMES記述項はすべて、そのレコード記述項の最後のデータ記述項の直後にまとめて書く。

  3. データ名-2およびデータ名-3は、同一レコード中の基本項目の名前または集団項目の名前とする。しかし、同じデータ名であってはならない。66レベルの記述項は77レベル、

    78レベル、

    88レベル、01レベルまたは別の66レベルの記述項を再命名することはできない。

  4. データ名-1は、修飾語として使用できない。データ名-1は対応する01レベルまたはFD, CD, SDの記述項の名前によってだけ修飾できる。データ名-2の記述項にもデータ名-3の記述項にも、OCCURS句が含まれていてはならない。また、データ名-2の記述項もデータ名-3記述項も、データ記述項にOCCURS句が含まれる項目の下位に属していてはならない。(前述のOCCURS句の節を参照。)

  5. データ名-3によって表わされる領域の始点は、データ名-2によって表わされる領域の始点よりも左側にあってはならない。データ名-3によって表わされる領域の終点は、データ名-2によって表わされる領域の終点よりも右側にあってはならない。したがって、データ名-3はデータ名-2の下位に属していてはならない。

  6. データ名-2およびデータ名-3は修飾できる。

  7. THRUとTHROUGHは同義語であり、どちらを書いてもよい。

  8. データ名-2からデータ名-3の範囲内にある項目には、OCCURS句によって定義される可変反復データ項目が含まれていてはならない。(前述のOCCURS句の節を参照。)

一般規則

  1. データ名-3を指定すると、データ名-1は集団項目となる。この集団項目には、データ名-2(データ名-2が基本項目の場合)またはデータ名-2の中の最初の基本項目(データ名-2が集団項目の場合)から始まり、データ名-3(データ名-3が基本項目の場合)またはデータ名-3の中の最後の基本項目(データ名-2が集団項目の場合)で終わる、すべての基本項目が含まれる。

  2. データ名-3を指定しないと、データ名-2のすべての属性がデータ名-1のデータの属性となる。

  3. データ名-2およびデータ名-3を明示的に修飾しなかった場合、参照の暖味性がなければ、01レベルの項目による暗黙の修飾がなされる。

8.1.1.21 SIGN(符号)句

機能

SIGN(符号)句は、演算符号の特性を明示的に記述する必要がある場合に、その演算符号の位置と表現形式を指定する。

一般形式

構文規則

  1. SIGN句を指定する対象となるのは、PICTURE文字列に "S" が含まれる数字データ記述項またはそのような数字データ記述項が少なくとも1つ含まれる集団項目だけである。

  2. SIGN句を適用する対象の数字データ項目の用途は、明示的または暗黙的に、DISPLAYとする。

  3. 数字データ記述項にSIGN句を記述する場合は、1つだけとする。

    この規則は廃止する。

  4. ファイル記述項の中でCODE-SET(符号系)句を指定するときは、そのファイル記述項の下位に属する符号付きの数字項目に対して、SIGN IS SEPARATE(独立符号)句を記述する。

    この規則は強制しない。(前述のCODE-SET句を参照。)

一般規則

  1. SIGN句は、それを指定した数字データ項目またはそれを指定した集団項目の下位に属する数字データ項目の、演算符号の位置と表現形式を指定する。SIGN句は、PICTURE文字列に"S" が含まれる数字データ記述項に対してだけ、適用できる。PICTURE文字列中の "S" は符号が付くことを表わすだけであり、符号の表現形式や位置を表わすわけではない。

  2. PICTURE文字列に "S" が含まれるがSIGN句は指定されていない数字データ項目は、演算符号をもつが、"S" によって符号の表現形式や位置が指定されているわけではない。このような符号付き数字データ項目には、一般規則の3から5は当てはまらない。SIGN句を指定しない場合の演算符号の表現は、COBOL言語の概念の章の文字の表現と基数の選定の節を参照。

  3. SEPARATE CHARACTER句を指定しないと、符号の位置と表現形式は下記のようになる。

    1. 演算符号は、LEADINGまたはTRAILINGに応じて、基本データ項目の左端または右端の桁位置に付く。具体的な符号の付き方は、COBOL言語の概念の章の文字の表現と基数の選定の節を参照。

    2. PICTURE文字列中の記号文字"S" は、標準データ形式で表わした項目の大きさには含まれない。

  4. SEPARATE CHARACTER句を指定すると、符号の位置と表現形式は下記のようになる。

    1. 演算符号は、LEADINGまたはTRAILINGに応じて、基本データ項目の左端または右端の桁位置に付く。これは桁位置には入らない。

    2. PICTURE文字列中の記号文字 "S" は、標準データ形式で表わした項目の大きさに含まれる。

    3. 正号および負号は、それぞれ、標準データ形式文字の"+" と "-" である。

  5. PICTURE文字列に記号文字"S" が含まれる数字データ記述項はすべて、符号付数字データ記述項となる。SIGN句付の項目に対して計算や比較のために変換が必要なときには、その変換は自動的に行われる。

  6. SIGN句付の集団項目の下位に属する項目(基本数字項目でも集団項目でも)にSIGN句を指定すると、下位の項目に指定したSIGN句が優先する。

  7. 外部浮動小数点数項目に関しては、SIGN句は注記としてだけ用いられる。 内部浮動小数点数項目に対しては、SIGN句は無効であり、使用すると診断メッセージが出される。

8.1.1.22 SYNCHRONIZED(桁詰め)句

機能

SYNCHRONIZED(桁詰め)句は、計算機記憶の固有の境界に従い、基本項目の配置を指定する。

標準COBOL定義の一部を構成するにもかかわらず、X/Open COBOL言語定義では、この機能は明示的に除外されている。したがって、X/Openに準拠するCOBOL原始プログラムにおいてはこの機能を使用するべきではない。

一般形式

指令

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

構文規則

  1. SYNCHRONIZED句は、基本項目に対してだけ指定できる。

    集団項目に対しても、SYNCHRONIZED句を指定できる。

  2. SYNCは、SYNCHRONIZEDの省略形である。

一般規則

  1. SYNCHRONIZED RIGHTは、基本項目を計算機の語の境界の右端の文字位置で終わらせるように割り付ける。

    この句は、 IBMCOMP指令 を設定したときだけ、効力を発揮する。

  2. SYNCHRONIZED句の中でLEFT指定を指定しても、効力はない。

  3. SYNCHRONIZED句の効力は、定義上、作成者がどのように実装したかに左右される。

  4. SYNCHRONIZED句を指定すると、計算機の語の左右の境界の間に、対象とするもの以外はいっさい入り込まないように、データ項目が割り付けられる。

    割付対象のデータ項目を格納するために必要な文字位置の個数が、計算機の語の左右の境界の間の文字位置の個数よりも少ないとき、使用されない文字位置は他のデータ項目のためには使われない。しかし、この使用されない文字位置は、下記のようになる。

    1. その基本項目が属する集団項目の大きさには含まれる

    2. そのデータ項目がREDEFINES句の右辺であるときには、再定義される文字位置に含まれる

    SYNCHRONIZED句によって基本項目の大きさが変更されることはないが、余分の文字位置が割り当てられる。

  5. SYNCHRONIZED句にRIGHTもLEFTも指定しないと、実行効率がよくなるように、基本項目が計算機の語の左右の境界の間に割り付けられる。

  6. SYNCHRONIZED句を指定した項目が 参照され、その大きさに依存する操作(桁寄せ、切捨て、桁あふれなど)が行われるときには、PICTURE句に指定した元の大きさが用いられる。

  7. データ項目にSYNCHRONIZED句および演算符号を指定すると、そのデータ項目の符号は通常の演算符号の位置に付けられる。この場合、SYNCHRONIZED LEFTまたはSYNCHRONIZED RIGHTのどちらを指定したかは、演算符号の位置に影響しない。

  8. OCCURS句を伴うデータ項目のデータ記述項、またはその下位に属するデータ項目のデータ記述項にSYNCHRONIZED句を指定すると、下記のようになる。

    1. 反復される各データ項目が桁詰めされる。

    2. 同じ表の中の他のデータ項目のために暗黙的に生成されるFILLERは、反復される各データ項目に対して生成される。

  9. 集団項目にSYNCHRONIZED句を指定すると、その集団項目に属するすべての項目に適用される。

  10. SYNCHRONIZED句を使用したときの効果については、COBOL言語の概念の章の文字の表現と基数の選定の節を参照。

8.1.1.23 TYPEDEF句

機能

TYPEDEF句は、プログラマによって定義された構造体または使用法としてレコードを定義する。

一般形式

構文規則

  1. TYPEDEF句は、レベル番号01を持つデータ記述項でのみ、指定可能である。

  2. TYPEDEF句を指定すると、次の句は指定できない。

    集団項目にTYPEDEF句が指定されると、従属項目はOCCURSまたはREDEFINES句を使用して指定できる。

    VALUE句は、TYPEDEF句を指定するデータ記述項目にも、また、TYPEDEF構造体内の条件名(88レベル項目)を除く、どの従属項目にも指定できない。

  3. TYPEDEF句がデータ記述に指定された場合、そのデータ記述にデータ名を含めなければならない。つまり、これを明示または暗示のFILLER句で指定してはならない。

  4. TYPEDEF句がEXTERNALプログラム (CALLプロトタイプ)に指定された場合、 TYPEDEF句はコンパイル集団の任意の後続原始コード行で参照することができる。

一般規則

  1. TYPEDEF句の使用目的は、後にUSAGE句で参照できるプログラマ定義の使用法または構造体を作成することにある。

  2. TYPEDEF句を使用して宣言されたレコードは、記憶域を割り当ないが、データ名-1を型定義名-1として、後続のデータ記述項に指定できることを宣言する。

8.1.1.24 USAGE(用途)句

機能

USAGE(用途)句は、計算機記憶内の データ項目の表現形式を指定する。

一般形式

指令

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

構文規則

  1. USAGE句はレベル66または88のデータ記述項には指定できない。

  2. USAGE句を集団項目の記述項に書いた場合、それに属するすべての基本項目または集団項目の記述項にも書いて構わない。しかし、どちらの項目にも同じ用途を記述しなければならない。

  3. 宣言にUSAGE句を持つ基本データ項目、または宣言にUSAGE句を持つ集団項目に従属する基本データ項目は、USAGE句がCOMPUTATIONAL

    , BINARY, PACKED-DECIMAL

    , COMPUTATIONAL-3

    , COMPUTATIONAL-4

    , COMPUTATIONAL-5

    のどれかを記述している場合、数字項目を定義するPICTURE文字列で記述しなければならない。 (たとえば、PICTURE文字列が記号 "P", "S", "V", "9" だけを含んでいること。)詳細は、前述のPICTURE句の節を参照。

    宣言にUSAGE句を持たない基本データ項目が、宣言にUSAGE句を持つ集団項目に従属する場合、そのUSAGE句は、英字、英数字、英数字編集、数字編集のデータ項目を定義したPICTURE文字列で記述されたリストの形式で記述してもよい。

  4. 宣言にUSAGE句を持つ基本データ項目、または宣言にUSAGE句を持つ集団項目に従属する基本データ項目は、USAGE句が COMPUTATIONAL-5

    または COMPUTATIONAL-X

    を記述している場合、数字項目を定義するPICTURE文字列で記述しなければならない。

    または、サイズが1から8バイトの数字項目を定義するPICTURE文字列で記述しなければならない。サイズが 1, 2, 3, 4, 5, 6, 7, 8 バイトの数字項目の場合、これはそれぞれ2, 4, 7, 9, 12, 14, 16, 18 の小数点位置である整数項目を記述したことと同じである。

    COMPUTATIONAL-X を指定し、PICTURE文字列が数字項目 定義している場合、その項目には符号を付けてはならない。

  5. BLANK WHEN ZERO句、JUSTIFIED句、SIGN句は、用途が明示的にも暗黙的にも DISPLAYでないデータ項目には指定してはならない。

  6. SYNCHRONIZED句およびVALUE句は、用途がINDEXのデータ項目に指定してはならない。

    SYNCHRONIZED句は、用途がINDEXのデータ項目に指定してもよい。

  7. COMPは、COMPUTATIONALの省略形である。

    COMP-1 はCOMPUTATIONAL-1の省略形である。
    COMP-2 はCOMPUTATIONAL-2の省略形である。

    COMP-3は、COMPUTATIONAL-3の省略形である。

    COMP-4は、COMPUTATIONAL-4の省略形である。

    COMP-5 はCOMPUTATIONAL-5の省略形である。

    COMP-X はCOMPUTATIONAL-Xの省略形である。

  8. 指標項目を明示的に参照できるのは、SEARCH(表引き)文、SET(設定)文、比較条件、手続き部の見出しのUSING(使用)句、

    ENTRY(導入)文のUSING句、

    またはCALL(呼ぶ)文のUSING句だけである。

  9. ポインタ

    または手続きポインタ

    項目を明示的に参照できるのは、SET(設定)文、比較条件、CALL(呼ぶ)文のUSING句、手続き部の見出しのUSING(使用)句、ENTRY(導入)文のUSING句、

    または CALL(呼ぶ)文のGIVING 句だけである。

  10. USAGE IS INDEX,

    USAGE IS OBJECT,

    USAGE IS POINTER,

    USAGE IS PROCEDURE-POINTER

    句のどれかで定義された基本データ項目は、条件変数であってはならない。

  11. 型定義名-1は、 TYPEDEF句のレコードと同じ原始ファイル内で前に定義しなければならない。

  12. USAGE 型定義名-1を指定した場合、以下の句は指定できない。

  13. 同じ階層の高位レベルに明示的なUSAGE 句がある場合、USAGE 型定義名-1の指定はエラーとなる。

  14. USAGE 型定義名-1を指定した項目の直後に、従属する項目(78以外の高位レベル番号の項目)を記述した場合、エラーとなる。

  15. USAGE OBJECT REFERENCE句は、集団項目用のデータ記述項に指定してはならないが、従属する基本データ項目には指定してもよい。

  16. USAGE OBJECT REFERENCE句をファイル節に記述してはならない。

    USAGE OBJECT REFERENCE句をファイル節に記述してもよい。


    注:オブジェクト参照が、アプリケーションロジックのアクティブなオブジェクトを参照しているかどうかによる。


  17. ACTIVE-CLASS指定は、ファクトリ定義、オブジェクト定義、メソッド定義にだけ記述できる。

一般規則

  1. USAGE句を集団のレベルに書くと、そのUSAGE句はその集団項目に属するすべての基本項目に適用される。

    ただし、PICTURE句があり、データ項目の定義が文字である場合を除く。

  2. USAGE句は、計算機記憶内でのデータ項目の表現形式を指定する。USAGE句は、データ項目の使い方には影響を与えない。ただし、手続き部の文の中には、作用対象を特定のUSAGE句を伴う基本項目に限定するものがある。USAGE句は項目の基数または文字表現の種類に影響することがある。用途の形式については、COBOL言語の概念の章の文字表現と基数の選定の節を参照。

  3. USAGE IS BINARY句は、計算機記憶内で数字項目を表現するのに基数 2 を使用することを定義する。USAGE IS BINARY句はUSAGE IS COMPUTATIONAL句と同義である。

  4. USAGE IS PACKED-DECIMAL句は、計算機記憶内で数字項目を表現するのに基数10 を使用することを定義する。またこの句は、各桁位置が計算機記憶内で最小限の構成を占めるように定義する。

    USAGE IS PACKED-DECIMAL句は、USAGE IS COMPUTATIONAL-3と同義語である。

  5. USAGE IS DISPLAY 句は、計算機記憶内でデータ項目を表現するのに(明示的または暗示的に) 標準のデータ形式を使用することを定義する。データ項目は文字境界上で整列させられる。

  6. USAGE IS DISPLAY句は、下記の種類の項目に適用できる。

  7. 基本項目または基本項目が属する集団項目にUSAGE句を指定しないと、用途は暗黙的にDISPLAYとされる。

  8. USAGE IS INDEX句を指定した基本項目を、指標データ項目という。指標データ項目には、表の要素の出現番号に相当する値を収める。

  9. MOVE(転記)文または入出力文の中で参照される集団の一部に指標データ項目、

    ポインタ・データ項目、

    手続きポインタ・データ項目

    が含まれていてもよい。この場合、指標データ項目、

    ポインタ・データ項目、

    手続きポインタ・データ項目

    の変換は行われない。

  10. USAGE IS COMPUTATIONAL-4は、USAGE IS COMPUTATIONALと同義語である。

  11. USAGE IS POINTER句を指定すると、対象データ項目の番地を記憶できる。 (SET文の節を参照。)

  12. USAGE IS は、データ項目が 手続きの番地を記憶する手続きポインタであることを指定する。( SET文の節を参照。) 参照する対象の手続きはどんな言語で書いてあってもよい。COBOLの場合、それは入れ子になっていないポインタの手続き部を表わす。下記のどちらかによって識別する。

  13. 型定義名-1を 基本項目として指定した場合、「USAGE 型定義名-1」句は、型定義名-1によって参照されるプログラマによって定義された用途と同じ属性を、基本項目に指定することになる。

  14. 型定義名-1を集団項目として指定した場合、「USAGE 型定義名-1」句は同一の構造をした集団項目を指定する働きをする。その効果は、型定義名-1によって識別されるデータ記述項の下位に属する複数のデータ宣言が、「USAGE 型定義名-1」句で宣言された項目の下位に、まったく同様に指定されたかのようになる。下位のデータ項目のデータ名は、型定義名-1によって参照されるプログラマによって定義された構造体の中に宣言されているものと同じになる。それらを一意に参照するには、データ名の修飾を行う。
  15. USAGE OBJECT REFERENCE句を用いて記述したデータ項目をオブジェクト参照と呼ぶ。オブジェクト参照は字類がオブジェクトであり項類がオブジェクト参照であるデータ項目である。オブジェクト参照の内容はオブジェクトの参照先または空である。ただし、下記の規則に従う。

    1. オブジェクト参照データ項目に割り当てられる記憶領域のサイズは4バイトである。
    2. 選択指定を何も書かないと、そのデータ項目は一般的オブジェクト参照となる。その内容は任意のオブジェクトの参照先であってよい。
    3. インターフェイス名-1を指定した場合、そのデータ項目によって参照されるオブジェクトは、インターフェイス名-1によって参照されるインターフェイスに適合しなければならない。
    4. クラス名-1を指定した場合、そのデータ項目によって参照されるオブジェクトはクラス名-1のオブジェクトであるかまたはクラス名-1のサブクラスでなければならない。ただし、下記の規則に従う。
      1. ONLY指定を書かなかった場合:
        1. FACTORY指定を書いた場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのファクトリ・オブジェクトまたはサブクラスでなければならない。
        2. FACTORY指定を書かなかった場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのオブジェクトまたはサブクラスでなければならない。
      2. ONLY指定を書いた場合:
        1. FACTORY指定を書いた場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのファクトリ・オブジェクトでなければならない。
        2. FACTORY指定を書かなかった場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのオブジェクトでなければならない。
    5. ACTIVE-CLASS指定を書いた場合、そのデータ項目によって参照されるオブジェクトは、そのオブジェクト参照が指定されているメソッドを呼び出すのに使用されたオブジェクトが属するクラスのオブジェクトでなければならない。
      1. FACTORY指定を書いた場合、そのデータ項目によって参照されるオブジェクトは、そのクラスのファクトリ・オブジェクトでなければならない。
      2. FACTORY指定を書かなかった場合、そのデータ項目によって参照されるオブジェクトは、そのクラスのオブジェクトでなければならない。

8.1.1.25 VALUE(値)句

機能

VALUE(値)句は、定数の値、作業場所項目の初期値、条件名に関連する値を定義する。

例:

  1. NEXT句の使用例は、 言語リファレンス - 追加トピックの章を参照。

一般形式

書き方1

書き方2

書き方3

構文規則

すべての書き方
  1. 符号付き数字定数には、符号付き数字PICTURE文字列を指定する。

  2. VALUE句の中の数字定数は、すべてPICTURE文字列で指定された値の範囲に収まるものにする。ゼロでない数字の切捨てを引き起こすものであってはならない。VALUE句の中の文字定数は、PICTURE句で示されている大きさを超えてはならない。

  3. 定数が記述してある場合、代わりに書き方1 および書き方2に表意定数を記述できる。
書き方1
  1. 書き方1で、VALUES AREを使用できる。

  2. 外部浮動小数点数データ項目には、VALUE句を指定できない。

    外部浮動小数点数データ項目に、VALUE句を指定できる。

  3. USAGE COMP-1 または USAGE COMP-2を指定した内部浮動小数点数データ項目に、VALUE句を指定できる。この場合の定数-1は、浮動小数点定数、表意定数ZERO、値ゼロを表す数字定数のどれかとする。
書き方2
  1. THRUとTHROUGHは同義語であり、どちらを書いてもよい。

  2. 1つのデータ項目に、書き方2の記述項をいくつでも書ける。

  3. 書き方2は、条件名に関してだけ使用できる。

  4. 条件名記述項では、VALUE句を必ず書く。条件名記述項に書けるのは、VALUE句と条件名自体である。

  5. 定数-2は、定数-3より小さくする。

  6. 書き方2は、内部浮動小数点数データ項目に対応する条件変数を定義するのに使用する。外部浮動小数点数データ項目には使用できない。この場合、定数-2 および定数-3は、浮動小数点定数、表意定数ZERO、値ゼロを表す数字定数のどれかとする。

    書き方2を、外部浮動小数点数データ項目に対応する条件変数を定義するのに使用できる。

  7. 定数-4は、定数-2から定数-3の範囲内のどの値とも等しくてはならない。つまり、定数-4は定数-2以上かつ定数-3以下であってはならない。

書き方3

  1. 一意名は、78レベル項目の宣言の前に、すべて定義しておく。一意名-1または一意名-3(LENGTHパラメータ)のどちらかが集団項目である場合、その集団の定義は、78レベル項目の宣言の前に、レベル番号がそれ以下の別のデータ項目が次にくることによって完結されていること。

一般規則

書き方1および2
  1. VALUE句は、それを指定した対象の項目またはその項目を含む集団項目のデータ記述に書いた他の句と矛盾してはならない。下記の規則が適用される。

    1. 項目の項類が数字である場合、VALUE句内の定数はすべて数字でなければならない。作業場所項目として定義された定数は、標準桁寄せ規則に従ってデータ項目に収められる。(COBOL言語の概念の章の標準桁寄せ規則の節を参照。)

    2. 項目の項類が英字、英数字、英数字編集、数字編集である場合、VALUE句内の定数はすべて文字とする。これらの定数をデータ項目中に収めるときの扱いは、そのデータ項目が英数字として定義されている場合と同様である。(COBOL言語の概念の章の標準桁寄せ規則の節を参照。) PICTURE句内の編集文字は、データ項目の大きさに含められる。(前述のPICTURE句の節を参照。) しかし、そのデータ項目の初期値を定めるものではない。したがって、編集項目に対するVALUEの定数は編集済みの形式にしておく。

    3. 項目の項類が数字編集である場合、VALUE句内の定数は数字定数でも文字定数でもよい。VALUE句内の定数が数字定数である場合、項目に収められる値は数字定数を数字編集項目に転記したのと同じとなる。

    4. 初期化は、BLANK WHEN ZEROまたはJUSTIFIEDの指定とは無関係に行われる。
条件名と
dialm.gif定数名以外に関する規則
(書き方1)
  1. VALUE句の使用に関する規則は、データ部のどの節で使用するかによって異なる。

    1. ファイル節内では、VALUE句は条件名記述項内でだけ使用する。

    2. 作業場所節および通信節内では、条件名記述項の中にVALUE句を指定する。 また、データ項目の初期値を指定するために、VALUE句を使用できる。この場合、 実行時要素が初期状態になった時に、データ項目の値はVALUE句で指定された値に設定される。データ記述項内でVALUE句を指定しないと、そのデータの初期値はどうなるかわからない。

    3. 連絡節内では、VALUE句は条件名記述項内でだけ使用する。

  2. ファイル節、連絡節および

    局所記憶節内

    のデータ記述項の中で、VALUE句を使用できる。ただし、注記にとどまる。

  3. REDEFINES句が含まれるデータ記述項またはその下位に属するデータ記述項の中では、VALUE句を使用できない。この規則は、条件名記述項には当てはまらない。

  4. 集団項目にVALUE句を指定するときは、定数は表意定数または文字定数にする。この場合、その集団項目に含まれる個々の基本項目または下位の集団項目を考慮することなく、その集団項目が初期化される。その集団項目の下位のレベルには、VALUE句を指定できない。

  5. JUSTIFIED, SYNCHRONIZED, USAGE(USAGE IS DISPLAYを除く)が記述された項目が含まれる集団項目に、VALUE句を書いてはならない。

  6. 表意定数の NULLは、USAGE POINTERまたはUSAGE PROCEDURE-POINTERを指定したデータ項目のVALUE句内にだけ指定できる。この種のデータ項目のVALUE句内に指定できる値は、このNULLだけである。NULLを指定すると、ポインタは他のデータ項目を指さないことが保証される。

  7. OCCURS句が含まれるデータ記述項またはその下位に属するデータ記述項の中でVALUE句を使用すると、反復される各データ項目に指定した値が割り当てられる。

  8. 可変反復データ項目に関連するデータ項目のデータ記述項の中で、VALUE句を指定すると、DEPENDING ON指定によって参照されるデータ項目の値がOCCURS句によって指定される反復回数の最大値と等しいものとして、そのデータ項目が初期化される。下記の場合に、データ項目は可変反復データ項目と関連する。

    1. VALUE句を指定したデータ項目が集団項目であり、その中に可変反復データ項目が含まれる。

    2. VALUE句を指定したデータ項目自体が、可変反復データ項目である。

    3. VALUE句を指定したデータ項目が、可変反復データ項目の下位に属する。

    DEPENDING ON指定によって参照されるデータ項目にVALUE句が関連する場合、可変反復データ項目が初期化された後で、VALUE句で指定された値がそのデータ項目に入られるものとみなされる。

  9. 字類が オブジェクトのデータ項目は、ヌルに初期化される。初期値は、VALUE句が効力を持つ時、およびデータ項目の記憶域が割り当てられた時に効力を持つ。
  10. 字類がポインタのデータ項目は、ヌルに初期化される。初期値は、VALUE句が効力を持つ時、およびデータ項目の記憶域が割り当てられた時に効力を持つ。

条件名に関する規則(書き方2)
  1. 条件名記述項には、VALUE句を必ず指定する。条件名記述項に書けるのは、VALUE句と条件名自体だけである。条件名の性質は、 対応する条件変数の性質によって暗黙的に決まる。

  2. 書き方2は、条件名に関連してだけ使用できる。THRU指定を書くときは、定数-2は定数-3よりも小さくする。

  3. FALSE句は、対応する条件名がSET 条件名 TO FALSE 文を参照する場合にだけ意味を持つ。 (SET文の節を参照。)

定数名に関する規則(書き方3)
  1. 書き方3は、定数名記述項にだけ使用できる。

  2. 定数-5を指定して演算子が続かない場合、 定数名の性質は定数-5と同様となる。そうでない場合、定数名の性質は整数と同様となる。

  3. 任意の数の算術演算子または 論理演算子を使用できる。式は左から右へ整数演算として評価される。式の中にかっこは使用できない。中間結果にゼロ未満のものがあると、最終結果はどうなるかわからない。整数-1の代わりに定数名を使用できる。

  4. 論理演算のANDとORは、2進表現のビットごとに作用する。

  5. 一意名-1 または一意名-3のLENGTHは、一意名-1または一意名-3に割り当てられた記憶領域の大きさである。一意名が集団項目である場合、その長さは下位のデータ項目をすべて含んだものである。

  6. NEXTから返される値は、前のデータ宣言の後にある記憶域の次のバイトの相対番地である。このデータ宣言がOCCURS句によって定義された表のものであると、NEXTから返される値は、表の最初の要素の後に起こる記憶域の次のバイトの相対番地である。

  7. 一意名-2 または一意名-4のSTARTは、一意名-2または一意名-4が始まる相対番地である。

  8. 規則18と19に関して、相対番地を下記のように定義する。

  9. 相対番地は別のCOBOL製品との間で移植性がない。相対番地は翻訳単位を超えた特定の値に依存すべきではない。

8.1.1.26 VALUE OF(ラベル項目の値)句

機能

VALUE OF句はファイルのラベル・レコード中の項目の内容を指定する。

ファイル記述項のVALUE OF句は、ANSI '85標準では廃要素に分類されており、ANSI標準の次回の全面改訂の際に、削除される予定である。

この構文は、このCOBOL処理系に組み込まれているすべての方言で全面的に使用することができる。FLAGSTD指令を使用すると、この構文が使われているすべての箇所を洗い出すことができる。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、この機能は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの句を使用するべきではない。

一般形式

書き方1 (すべてのファイル)

書き方2 (すべてのファイル)

構文規則

書き方1 (すべてのファイル)
  1. データ名-1は、必要ならば修飾してもよいが、添字や指標を付けることはできない。また、データ名-1にはUSAGE IS INDEX句を記述してあってはならない。
書き方2 (すべてのファイル)
  1. データ名-2は、作業場所節内に記述しておく。

  2. 定数-2は文字定数とする。表意定数であってはならない。

  3. ファイル管理記述項のASSIGN句の中で、外部ファイル参照、データ名-1、定数-1のどれかを指定した場合、 VALUE OF FILE-ID句は使用できない。(前述のファイル管理記述項の節を参照。)

一般規則

書き方1 (すべてのファイル)
  1. VALUE OF句は注記になる。

書き方2 (すべてのファイル)
  1. 定数-2またはデータ名-2に指定した文字列は、外部ファイル名と解釈される。


Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用されている固有の商標と商品名 は国際法によって保護されています。
前ページへ データ部 データ部 - 画面節 次ページへ