Previous データ部 データ部 - 画面節 Next

第 8 章 : データ部 - ファイルおよびデータ記述

この章では、ファイル記述項およびデータ記述項の全体的な骨組みを解説する。以下に、この2つの記述項で使用されるすべての句の説明をアルファベット順に示す。

8.1 ファイル記述項の全体的な骨組み

機能

ファイル記述は、当該ファイルに関する物理的構造、識別名、およびレコード名を含む。

ファイル記述は、ファイル結合子、関連づけられたデータレコード、および関連づけられたデータ項目の内部属性および外部属性を決定する。また、ファイル名が局所名と大域名のどちらであるかも決定する。

一般形式

形式 1 (レコード順ファイル)

形式 2 (行順ファイル)

形式 3 (相対ファイルおよび索引ファイル)

形式 4 ()整列併合ファイル

構文規則

すべての形式 (すべてのファイル)
  1. ファイル名-1の後の句は、どの順序で書いてもよい。

  2. VALUE OF FILE-ID句が指定されている場合は、 定数-1が英数字定数でなければならず、表意定数であってはならない。
形式 1、2 および 3 (レコード順ファイル
dialm.gif行順ファイル、
相対ファイル、および索引ファイル)
  1. レベル指示語 FD は、ファイル記述の始まりを表しており、FD の後にファイル名が続くものとする。

  2. ファイル記述項の後には1個以上のレコード記述項が続くものとする。

  3. EXTERNAL句とTHREAD-LOCAL句を同じファイル記述項に指定することはできない。
形式 4 (整列併合ファイル)
  1. レベル指示語 SD は、整列併合ファイル記述の始まりを表しており、SD の後にファイル名が続くものとする。

  2. ファイル名の後の句は、どの順序で書いてもよいし、まったく書かなくてもよい。

  3. 整列併合ファイル記述項の後には1個以上のレコード記述項が続くものとする。 ただし、入出力文はいずれも、このファイルに対して実行できない。

一般規則

形式 1 (レコード順ファイル)
  1. 順ファイルに対するファイル記述項にLINAGE句およびEXTERNAL句が含まれる場合は、LINAGE-COUNTERデータ項目が外部データ項目となる。順ファイルに対するファイル記述項にLINAGE句およびGLOBAL句が含まれる場合は、特殊レジスタ LINAGE-COUNTER が大域名となる。

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

機能

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

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

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

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

一般形式

形式 1

形式 2

形式 3

形式 4

構文規則

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

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

    指定されていれば、

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

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

  3. 以下の用途の項目に指定されたRENAMES句の左辺として、PICTURE(形式)句を指定してはならない。

    • INDEX

    • OBJECT-REFERENCE

    • PROCEDURE-POINTER

    • PROGRAM-POINTER

    • POINTER

    • COMPUTATIONAL-1、COMPUTATIONAL-2、

    • BINARY-CHAR、BINARY-SHORT、BINARY-LONG、BINARY-DOUBLE、

    • FLOAT-SHORT、FLOAT-LONG、

    • EVENT-POINTER、MONITOR-POINTER、MUTEX-POINTER、SEMAPHORE-POINTER、またはTHREAD-POINTER
    .

    基本項目を記述する他のどの記述項に対しても、PICTURE句を指定しなければならない。ただし、次の規則(構文規則4)に該当する場合を除く

  4. 形式 1のVALUE句で英数字定数または各国語型定数が指定されている場合は、基本項目に対してPICTURE句を省略してもよい。以下の場合は、PICTURE句が暗黙的に指定される。

    1. 定数が英数字の 'PICTURE X(長さ)' である

    2. 定数が各国語型の 'PICTURE N(長さ))'である

    ここで、「長さ」とは、COBOL言語の概念の章の定数節で指定された、定数の長さである。

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

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

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

  8. EXTERNAL句およびTHREAD-LOCAL句は、同じデータ記述項の中には指定できない。

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

  10. データ名-1は、GLOBAL句およびEXTERNAL句を含む記述項に対して、または、GLOBAL句およびEXTERNAL句を含むファイル記述項に関連づけられたレコード記述に対して指定するものとする。

  11. TYPEDEF句は、レベル番号が01のデータ記述項の中でのみ指定できる。

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

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

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

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

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

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

  16. データ名-2およびデータ名-3は、暗黙的に修飾できる。

  17. VALUE句は、字類が指標、オブジェクト、ポインタのデータ項目には指定できない。

  18. ANY LENGTH句を指定した場合は、レベル番号、記述項名、PICTURE、およびUSAGE以外の句は指定できない。

一般規則

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

    1. 他の条件名

    2. 66レベルの項目

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

    4. 指標データ項目

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

      (USAGE(用途)句節を参照。)

    5. 定数名

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

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

  3. 形式 4 では、定数名を定義する。定数名(constant-name)とは、原始コードがCOBOLシステムを経由して渡されるときに割り当てられる定数値を表わす記号名である。COBOLシステムは定数名を対応する値で置き換える。

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

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

8.3 ANY LENGTH句

機能

ANY LENGTH句が指定されている場合は、連絡節項目の長さが実行時に変化し、引数の長さにより決定される。

一般形式

ANY LENGTH

構文規則

  1. ANY LENGTH句は、関数、含まれているプログラム、またはプロパティメソッド以外のメソッドの連絡節中の基本レベル 1 記述項でのみ記述するものとする。


注:ANY LENGTH句は、もっとも外部にあるプログラムで指定することはできない。これは、もっとも外部のプログラムは、プログラムプロトタイプ形式のCALL文の有無にかかわらず、呼び出せるためである。プログラムプロトタイプを使用しない呼出では、引数が、ANY LENGTHで記述された仮のパラメータに対応しているかどうかを決定できない。


  1. ANY LENGTH句を含む原始要素が含まれるプログラムまたはメソッドである場合、記述項の左辺が、その手続き部見出しで以下のいずれかとして参照されなければならない。

    1. BY REFERENCE指定を含む仮パラメータ

    2. 戻り値

  2. ANY LENGTH句を含む原始要素が関数の場合、記述項の左辺が、手続き部見出しでBY REFERENCE指定を含む仮パラメータとして参照されなければならない。

  3. 記述項の左辺にはPICTURE句を指定しなければならない。そして、PICTURE句で指定された文字列は、形式記号'N'または'X'の1つのインスタンスでなければならない。

一般規則

  1. ANY LENGTH句を指定した場合、記述項の左辺は以下のいずれかとなる。

    1. 起動するランタイム要素の対応する引数または戻り項目がゼロの長さの項目の場合は、ゼロの長さの項目となる。

    2. そのPICTURE句の文字列中の形式記号がn回繰り返されたものとして扱われる。ここで、n は、起動するランタイム要素の対応する引数または戻り項目のながさを表す。

8.4 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.5 BLOCK CONTAINS(ブロックの大きさ)句

機能

BLOCK CONTAINS(ブロックの大きさ)句は物理レコードの大きさを指定する。

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

一般形式

一般規則

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

8.6 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.7 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.8 データ名およびFILLER句

機能

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

一般形式

構文規則

  1. データ名またはFILLER句は、

    指定するのであれば、

    データ記述項のレベル番号の直後に書かれなければならない。

一般規則

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

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

8.9 EXTERNAL(外部)句

機能

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

一般形式

構文規則

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

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

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

  4. 定数-1は文字または各国語型とし、表意定数としてはならない。

  5. EXTERNAL句は字類オブジェクトのデータ項目用に指定してはならない。

一般規則

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

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

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

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

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

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

8.10 GLOBAL(大域)句

機能

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

一般形式

構文規則

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

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

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

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

一般規則

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

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

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

8.11 JUSTIFIED(桁寄せ)句

機能

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

一般形式

構文規則

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

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

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

  4. 指標データ項目(後述のUSAGE(用途)句節を参照)

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

    には、 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.12 LABEL RECORDS(ラベル・レコード)句

機能

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

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

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

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

一般形式

構文規則

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

    句は必要ない。

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

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

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

一般規則

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

8.13 レベル番号

機能

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

定数名、

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

一般形式

構文規則

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

  2. FD または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. FDまたはSD記述項の下位に属する複数の01レベルの記述項は、同じ領域を暗黙的に再定義する。

8.14 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文を実行したとき、またはページあふれ条件が発生したとき(手続き部 - SEARCH - WRITEの章のWRITE(書き込み)文節を参照) 、各データ項目の値に基づいて、次の論理ページを構成する各部分の行数が決定される。

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

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

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

8.15 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句が含まれるデータ記述項の後ろに、その下位に属さないデータ記述項を続けることができる。データ名-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: 非再帰プログラムの指標名に割り当てられる記憶域
    指標名を定義する節  指標名を割り当てる節  
    NOREENTRANTREENTRANT (1) REENTRANT (2)
    作業場所 作業場所 作業場所 スレッド局所
    スレッド局所 スレッド局所 スレッド局所 スレッド局所
    連結 作業場所 局所記憶 局所記憶

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

8.16 PICTURE(形式)句

機能

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

一般形式

指令

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

構文規則

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

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

  3. 文字列に含められる文字の数は、最大30字である。

    文字列に含められる文字の数は、最大50字である。

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

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

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

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

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

一般規則

PICTURE句に書けるデータは、英字、数字、英数字、英数字編集、数字編集、

および外部浮動小数点数

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

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

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

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

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

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

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

    PICTURE文字列で表わせる桁数は、31までである。

    PICTUREPICTURE文字列で表わせる桁数は、38までである。

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

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

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

  1. 文字列に書ける記号文字は、 "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"、

"CR"、および"DB"

使用する記号

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

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文字列中の通貨編集用文字は、編集中に通貨編集用文字が収められる文字位置を示す。通貨編集用文字は、通貨記号または特殊名段落にCURRENCY SIGN句で指定した1文字で表わされる。

通貨編集用文字が最初に現れたときに、その文字数が項目の長さに追加される。その後、通貨編集用文字が現れるたびに、1が項目の長さに追加される。

CURRENCYコンパイラ指令も、使用される通貨編集用文字に影響を与える。

編集規則

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

  1. 単純挿入(simple insertion)

  2. 特殊挿入(special insertion)

  3. 固定挿入(fixed insertion)

  4. 浮動挿入(floating insertion)

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

  1. 空白によるゼロ抑制

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

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

表 8-3: データの項類に適用できる編集の種類
項類 編集の種類
英字 "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-4:PICTURE 文字列における編集用記号
PICTURE句の文字列中の編集用記号 編集の結果挿入される文字
データ項目の値が正またはゼロ データ項目の値が負
+ + -
- 空白1個 -
CR 空白2個 CR
DB 空白2個 DB

浮動挿入編集

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

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

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

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

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

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

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

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

PICTURE文字列の中では、浮動挿入文字を表わす方法は2通りである。1つは、小数点の左側の数字列の先頭の一部または全部を、挿入文字で書く方法である。もう1つは、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-5に示す。"○" 印は、その列の上段に示した文字を、その行の左端に示した文字の前に書いてもよいことを示す。中かっこ{ }で囲んだ文字群は、その中の1つしか書けないことを示す。 " 通貨" は、通貨編集用文字を示す。PICTURE文字列の中には、文字 "A " , "○", "Z", " 9", "*", の少なくともどれか1つ、または記号文字 "+" , "-"," 通貨" の少なくともどれか2つを書く。

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

表 8-5:PICTURE文字列における順序規則
先行文字 固定挿入文字 浮動挿入文字 その他の文字
後続文字   B 0 / , . +
-
+
-
CR
DB
通貨 E Z
*
Z
*
+
-
+
-
通貨 通貨 9 A
X
S V P P G
固定挿入文字 B x x x x x x     x   x x x x x x x x   x   x x
0 x x x x x x     x   x x x x x x x x   x   x  
/ x x x x x x     x   x x x x x x x x   x   x  
, x x x x x x     x   x x x x x x x     x   x  
. x x x x   x     x   x   x   x   x            
+
-
                                             
+
-
x x x x x       x x x x     x x x     x x x  
CR
DB
x x x x x       x   x x     x x x     x x x  
通貨           x                                  
E       x x                       x     x      
浮動挿入文字 Z
*
x x x x   x     x   x                        
Z
*
x x x x x x     x   x x               x   x  
+
-
x x x x         x       x                    
+
-
x x x x x       x       x x           x      
通貨 x x x x   x                 x                
通貨 x x x x x x                 x x       x      
その他の文字 9 x x x x x x     x x x   x   x   x x x x x  
A
X
x x x                           x x          
S                                              
V x x x x   x     x   x   x   x   x   x   x    
P x x x x   x     x   x   x   x   x   x   x    
P           x     x                   x x   x  
G x                                           x

8.17 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データ名のデータ記述には、その記述項の左辺およびその下位のデータ項目が含まれる。ただし、下記のものは例外である。

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

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

    	METHOD-ID. SET PROPERTY データ名. 
    	DATA DIVISION. 
    	LINKAGE SECTION. 
    	01 LSデータ名 データ記述. 
    	PROCEDURE DIVISION USING LS-data-name. 
    	パラメータ名. 
    		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データ名. 
    	パラメータ名. 
    		MOVE LSデータ名 TO データ名 
    		EXIT METHOD. 
    	END METHOD. 

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

8.18 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を指定しないと、該当するファイルのレコードの最短文字数は、そのファイルのレコード用に記述した最小の文字数に等しいものとされる。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8.19 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.20 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. データ名-2のデータ記述項に、REDEFINES句が含まれていてもよい。

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

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

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

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

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

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

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

  8. 新しい文字位置の記述を与える項目は、VALUE句を持ってはならない。ただし、条件名の項目内では例外である。

  9. REDEFINES句は、字類オブジェクトのデータ項目に指定してはならない。

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

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

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

  11. データ名-2は、ANY LENGTH句を使用して記述してはならない。

一般規則

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

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

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

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

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

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

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

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

8.21 RENAMES(再命名)句

機能

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

一般形式

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

構文規則

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

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

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

    78レベル、

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

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

  4. データ名-1は、修飾語として使用できない。データ名-1は対応する01レベルまたはFD または 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(反復)句節で定義されているように、可変反復データ項目が含まれていてはならない。

一般規則

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

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

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

8.22 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.23 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.24 THREAD-LOCAL(スレッド局所)句

機能

THREAD-LOCAL(スレッド局所)句は、スレッド入力された各プログラムのデータ項目またはファイル結合子に、コピーが作成されることを指定する。

一般形式

IS THREAD-LOCAL

構文規則

  1. THREAD-LOCAL句は、作業場所節のファイル記述項またはレコード記述項でのみ指定できる。

一般規則

  1. THREAD-LOCAL句を指定すると、ファイル結合子またはデータ項目のコピーが作成され、プログラムを入力する新しいスレッドが実行されるたびに、その初期状態に設定される。ファイル結合子またはデータ項目は、それらが作成されたときのスレッドにのみ認識される。そして、そのスレッドの実行が完了したとき、またはプログラムにCANCEL文が実行されたといに削除される。そうでない場合は、そのスレッド中のプログラムの次回の呼出しの際に、データ項目またはファイル結合子が最後に使用されたときの状態となる。

  2. THREAD-LOCAL句を指定しない場合は、ファイル結合子またはデータ項目がプログラムに入力されるすべてのスレッドにより共有される。

  3. シングルスレッド環境では、THREAD-LOCAL句は無視され、プログラムは、この句が指定されていないときと同様に動作する。

8.25 TYPEDEF句

機能

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

一般形式

構文規則

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

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

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

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

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

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

一般規則

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

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

8.26 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(形式)句節を参照。

    A宣言に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句、

    組み込み関数の引数

    INVOKE文のUSING指定、行内メソッド呼出しの引数、

    INITIALIZE文、

    またはUSINGCALL(呼ぶ)文のGIVING句のみである。

  9. ポインタ

    または手続きポインタ

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

    INVOKE文、行内メソッド呼出しの引数リスト、関数の引数リスト

    のみである。

  10. USAGE IS INDEX、

    USAGE IS OBJECT、

    USAGE IS POINTER、

    またはUSAGE IS PROCEDURE-POINTER

    USAGE IS EVENT-POINTER、USAGE IS MONITOR-POINTER、USAGE IS MUTEX-POINTER、USAGE IS PROCEDURE-POINTER、USAGE IS SEMAPHORE-POINTER、またはUSAGE IS THREAD-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指定は、ファクトリ定義、オブジェクト定義、メソッド定義にだけ記述できる。

  18. 用途がEVENT-POINTER のデータ項目は、CLOSE文、OPEN文、 SET文、WAIT文、またはUSING 指定でのみ、明示的に参照できる。

  19. 用途がMONITOR-POINTER、MUTEX-POINTER、またはSEMAPHORE-POINTERのデータ項目は、CLOSE文、OPEN文、 SET文、またはUSING指定でのみ、明示的に参照できる。

  20. 用途がTHREAD-POINTERのデータ項目は、START文、WAIT文、またはUSING指定でのみ、明示的に参照できる。

  21. 記述にUSAGE NATIONAL句を含む基本データ項目、または記述にUSAGE NATIONAL句を含む集団項目の下位にある基本データ項目は、各国語型または各国語型編集データ項目を記述するPICTURE文字列で宣言されなければならない。

  22. 基本データ項目、およびそれが属する集団のどれに対してもUSAGE句を指定しない場合は、以下が適用される。

    1. 明示的または暗黙的なPICTURE文字列が符号、'N'を含む場合、USAGE NATIONAL句が暗黙的に指定される。

    2. PICTURE文字列が符号、'N'を含まない場合は、USAGE DISPLAY句が暗黙的に指定される。

  23. OBJECT REFERENCE指定、POINTER指定、またはPROGRAM-POINTER指定を伴うUSAGE句は、レベル 1 の基本データ項目以外に指定してはならない。

    この制限は強制しない。

  24. プログラムプロトタイプ名-1を指定する場合、記述項の左辺にTYPEDEF句を指定しなければならない。

    この制限は強制しない。

  25. 明示的または暗黙的なPICTURE文字列が符号、'N'を含む基本データ項目に関連づけられたUSAGE句には、NATIONALを指定しなければならない。

一般規則

  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 IS INDEX句は、データ項目が指標データ項目であることを指定し、その値は表要素の出現回数と対応するものとする。

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

    ポインタ・データ項目、

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

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

    ポインタ・データ項目、

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

    の変換は行われない。

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

  10. USAGE IS POINTER句を指定すると、対象データ項目の番地を記憶できる。 (手続き部 - SEARCH - XML PARSEの章のSET(設定)文節を参照。)

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

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

  13. 型定義名-1を集団項目として指定した場合、「USAGE 型定義名-1」句は同一の構造をした集団項目を指定する働きをする。その効果は、型定義名-1によって識別されるデータ記述項の下位に属する複数のデータ宣言が、「USAGE 型定義名-1」句で宣言された項目の下位に、まったく同様に指定されたかのようになる。下位のデータ項目のデータ名は、型定義名-1によって参照されるプログラマによって定義された構造体の中に宣言されているものと同じになる。それらを一意に参照するには、データ名の修飾を行う。.

  14. 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指定を書かなかった場合、そのデータ項目によって参照されるオブジェクトは、そのクラスのオブジェクトでなければならない。

  15. USAGE IS EVENT-POINTER句は、ソフトウェアイベントの発生を知らせる桁詰めデータ項目を識別する。イベントデータ項目の値は、TRUE またはFALSEである。

  16. USAGE IS MONITOR-POINTER句は、モニタと呼ばれる桁詰めデータ項目を識別する。このデータ項目について、読み込みロック、表示ロック、書き込みロックを要求することができる。


    注:モニタは通常、複数のスレッドが読み込みまたは書き込みを行う可能性のあるデータ構造を保護するために使用される。


  17. USAGE IS MUTEX-POINTER句は、ミューテックスと呼ばれる桁詰めデータ項目を識別する。このデータ項目を使用して、マルチスレッドアプリケーションの重要な節を保護することができる。ミューテックスデータ項目の値は、ONまたはOFFである。ON状態のミューテックスデータ項目を持つことができるのは、一度に1つのスレッドのみである。

  18. USAGE IS SEMAPHORE-POINTER句は、数を数える桁詰めデータ項目を識別する。このデータ項目はマイナスの値を持つことはない。

  19. USAGE IS THREAD-POINTER句は、スレッドのハンドルを保管するデータ項目を識別する。

  20. 明示的または暗黙的なUSAGE IS NATIONAL句は、各国語符号化文字で計算機内に保管され、文字境界に並べられたデータ項目を識別する。各国語文字は、計算機の記憶域で同じ大きさの文字として表示される。各国語型データ(UNICODE)について詳しくは、COBOLシステムのマニュアルを参照。

  21. USAGE IS BINARY-CHAR、USAGE IS BINARY-SHORT、USAGE IS BINARY-LONG、およびUSAGE IS BINARY-DOUBLEの各句は、計算機の記憶域で 2 の基数を持つデータ項目を識別する。これらの用途は、 以下に示すPICTURE文字列でUSAGE IS COMP-5を指定することと同じである。USAGE句でUNSIGNEDが指定されている場合を除き、同等のPICTURE文字列にはSが含まれる。

    用途 同等のPICTURE文字列
    BINARY-CHAR [S]9(2)
    BINARY-SHORT [S]9(4)
    BINARY-LONG [S]9(9)
    BINARY-DOUBLE [S] 9(18)

  22. USAGE IS FLOAT-SHORT句は、USAGE IS COMPUTATIONAL-1の指定と同じである。

  23. USAGE IS FLOAT-LONG句は、USAGE IS COMPUTATIONAL-2の指定と同じである。

  24. USAGE PROGRAM-POINTER句を指定するデータ記述項は、手続きポインタデータ項目を指定する。このデータ項目は、プログラムポインタおよび手続きポインタとも呼ばれ、プログラムの位置を含む。(手続き部 - SEARCH - XML PARSEの章のSET(設定)文節を参照。) 手続きは、どの言語で書かれていてもよい。COBOLで書かれている場合は、プログラムの手続き部を表す。これは入れ子になっておらず、以下のいずれかで識別される。

    • プログラム名段落のプログラム名

    • ENTRY文の記述項名

  25. プログラムプロトタイプ名-1を指定する場合は、 このデータ項目は制限されたプログラムポインタとなる。制限されたプログラムポインタは、定義済みの位置、NULLまたは、指定されたプログラムプロトタイプ名で識別されたものと同じシグニチャのプログラムの位置のみを含む。

8.27 VALUE(値)句

機能

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

  1. VALUE句のNEXT指定の使用例は、 言語リファレンス - 追加トピックの章の定数名のNEXT指定節に掲載されている。

一般形式

形式 1

形式 2

形式 3

形式 4

構文規則

すべての形式
  1. 符号付き数字定数を指定する場合は、記述項の左辺は符号付き数字データ項目でなければならない。

  2. 記述項の左辺の項類が数字である場合は、VALUE句注の定数はすべて数字でなければならず、その値は、PICTURE句またはUSAGE句が示す値の範囲内でなければならない用途がFLOAT-SHORTおよびFLOAT-LONG以外である場合は、この値が、切り捨てやゼロ以外の数字を要求するものであってはならない。この値は、PICTURE文字符号 'P'に対応する各位置では数字のゼロでなければならない。

  3. 項目の字類が英字または英数字の場合は、VALUE句中の定数は英数字定数でなければならない。基本項目のVALUE句中の英数字定数は、 明示的なPICTURE句で示されたサイズを越えてはならない。英数字集団項目のVALUE句中の英数字定数は、その集団項目のサイズを越えてはならない。

  4. 項目の字類が各国語型の場合は、VALUE句中の定数は各国語型定数でなければならない。基本項目のVALUE句中の各国語型定数は、 明示的なPICTURE句で示されたサイズを越えてはならない。各国語型集団項目のVALUE句中の各国語型定数は、その集団項目のサイズを越えてはならない。

形式 1 および 4
  1. VALUE句は、REDEFINES句を含むデータ記述項、およびREDEFINES句を含む記述項の下位の記述項のいずれでも指定してはならない。

  2. 集団レベルでVALUE句を指定した場合は、定数がその集団項目と同じ項類でなければならない。または、その項類の受取り側項目へのMOVE文で許可された表意定数でなければならない。この集団内の下位のレベルでは、VALUE句を指定できない。

  3. 集団レベルでVALUE句を指定した場合は、その集団内の下位のレベルをJUSTIFIED句または SYNCHRONIZED句で記述してはならない。 また、英数字集団項目の下位にあるすべてのデータ項目は、明示的または暗黙的にUSAGE DISPLAYで記述しなければならない。

形式 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レベル項目の宣言の前に、レベル番号がそれ以下の別のデータ項目が次にくることによって完結されていること。

形式 4
  1. VALUE句を含むデータ記述項は、OCCURS句を含んでいるか、またはOCCURS句を含むデータ記述項の下位でなければならない。

  2. 添え字-1および添え字-2は、整数の数字定数でなければならない。

  3. 1つのFROM指定には、1個の添え字-1が含まれなければならない。この添え字-1は、その記述項またはその上位の記述項の左辺にある各OCCURSに対して指定される。ここでOCCURS句は、記述項の左辺に指定される添え字付き参照と同じ順序で指定されるものとする。添え字-1の各インスタンスは、それに関連づけられたOCCURS句の中での出現回数の最大値を越えてはならない。

  4. TOを指定した場合が、各OCCURS句に対し、1個の添え字-2が含まれなければならない。この添え字-2は、その記述項またはその上位の記述項の左辺にある各OCCURSに対して指定される。ここでOCCURS句は、記述項の左辺に指定される添え字付き参照と同じ順序で指定されるものとする。添え字-2の各インスタンスは、それに関連づけられたOCCURS句の中での出現回数の最大値を越えてはならない。 1個のTO指定中の添え字-2は、添え字-2の表要素は同じ反復であるか、対応する添え字-1の表要素の次の反復であるという仕様でなければならない。

一般規則

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

    1. 定数がデータ項目の値を定義する場合、その定数は、標準桁寄せ規則に従ってデータ項目に収められる。(COBOL言語の概念の章の標準桁寄せ規則節を参照。)

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

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

    3. 初期化は、BLANK WHEN ZEROまたはJUSTIFIEDの指定とは無関係に行われる。
データ項目(形式 1)
  1. VALUE句の使用に関する規則は、データ部のどの節で使用するかによって異なる。

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

    2. 作業場書節

      および局所記憶節

      内では、条件名記述項の中にVALUE句を指定する。 また、データ項目の初期値を指定するために、VALUE句を使用できる。この場合、 ランタイム要素が初期状態になった時に、データ項目の値はVALUE句で指定された値に設定される。データ記述項内でVALUE句を指定しないと、そのデータの初期値はどうなるかわからない。

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

  2. ファイル節、連絡節 、

    および局所記憶節内

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

  3. 集団レベルの記述項でVALUE句を指定すると、集団領域は、その集団に含まれる個々の基本項目および集団項目に対して配慮することなく初期化される。

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

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

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

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

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

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

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

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

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

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

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

  3. FALSE句は、対応する条件名がSET 条件名 TO FALSE 文を参照する場合にだけ意味を持つ。(手続き部 - SEARCH - XML PARSE の章の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製品との間で移植性がない。相対番地は翻訳単位を超えた特定の値に依存すべきではない。

表に関する規則 (形式 4)
  1. 形式 2のVALUE句は、定数-6の値となる表要素を初期化する。初期化された表要素は、添え字-1で識別される。それに続く表要素は順番に初期化され、続いて現れる定数-6の値として初期化される。これらの表要素は、1つずつ増えていく番号をつけた添え字により参照される。この添え字は表の最小次元を表す。番号をつける前の添え字への参照が、対応するOCCURS句により指定された最大反復回数と同じであると、添え字の番号は1に設定され、それに次いで次元の小さい表の添え字が次の番号となる。

  2. TOが指定されている場合は、出現する定数-6が、指定された順に、規則22で記述された初期化中の原文として再利用される。これは、添え字-2の表要素が初期化されるまで繰り返される。

  3. TOを指定しない場合は、TO指定が、対応する各添え字-1の表要素の最大出現回数として、各添え字-2で指定された場合と同様の動作となる。

  4. 複数のFROM指定が同じ表要素を参照している場合は、VALUE句中の最後のFROM指定で定義された値が表要素に割り当てられる。

8.28 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.
本書、ならびに使用されている固有の商標および商品名は国際法によって保護されています。


Previous データ部 データ部 - 画面節 Next