第5章 データ部
5.1 概要
データ部では、実行用プログラムが処理するためのデータを定義する。実行用プログラムが処理するデータには、以下のものがある。
- 外部記憶装置から入力したり、外部記憶装置や印刷装置に出力するファイルのデータ
- 整列併合するためのファイルのデータ
- 報告書を作成するためのファイルのデータ
- 表示装置に表示したり表示装置から入力するデータ
- 利用者が定義するデータ
5.2 データ部の構成(DATA
DIVISION)
データ部は、環境部より後に書く。データ部は省略することができる。データ部は、基底場所節、ファイル節、作業場所節、定数節、連絡節、報告書節および画面節の7つの節からなる。
データ部の構成を以下に示す。データ部を構成する節および記述項は、以下に示す順に書かなければならない。
(※) SIT
COBOLでは、ファイル節、作業場所節のみ書くことができる。(連絡節はサポート予定)
書き方
DATA DIVISION.
[ FILE SECTION.
[ ファイル記述項 [ レコード記述項 ] … ] |
整列併合ファイル記述項 { レコード記述項 } … ]
[ WORKING-STORAGE SECTION.
[ 独立データ記述項 | レコード記述項 ] … ]
[ LINKAGE SECTION.
[ 独立データ記述項 | レコード記述項 ] … ]
(※) SIT COBOLは、LINKAGE
SECTIONは未サポートである。(サポート予定あり)
ファイル節(FILE SECTION)
ファイル節では、順ファイル、索引ファイル、および整列併合用ファイルファイル構造とレコードのデータ構造を定義する。
ファイル節には、節の見出し(FILE
SECTION)の後に、以下の記述項を書く。ファイル節で義したファイルは、環境部のファイル管理記述項で外部媒体と関連付けなければならない。
- 順ファイル機能、索引ファイル機能を使う場合、1つのファイルに対して、1つのファイル記述項と、それに続く1つ以上のレコード記述項を書く。レコード記述項は、ファイル記述項の直後に書かなければならない。
- 整列併合機能を使う場合、1つの整列併合用ファイルに対して、1つの整列併合用ファイル記述項と、それに続く1つ以上のレコード記述項を書く。レコード記述項は、整列併合用ファイル記述項の直後に書かなければならない。
作業場所節(WORKING-STORAGE
SECTION)
作業場所節では、実行用プログラムで使うデータやレコードのデータ構造を定義する。作業場所節には、節の見出し(WORKING-STORAGE
SECTION)の後に、独立データ記述項またはレコード記述項を書く。
独立データ記述項
互いに階層関係を持たず、それ以上細分化する必要のない項目は、独立データ記述項で定義するころができる。独立データ記述項は、レベル番号が77のデータ記述項である。独立データ記述項には、以下のすべての句を書かなければならない。
- レベル番号77
- データ名
- PICTURE句、またはUSAGE IS INDEX句、USAGE IS COMP-1句、USAGE IS
COMP-2句
レコード記述項
レコードに関連したデータ記述項のすべての組を、「レコード記述項」という。互いに階層
関係を持つデータは、レコード記述項にまとめて定義する。1つのレコード記述項では、いくつかの集団項目と基本項目を定義する。他のデータ項目と階層関係をもたないデータを定義する場合、1つのレコード記述項で1つの基本項目だけを定義することもできる。
レコードの構成は、レベル番号で表す。レコードに属するすべてのデータ項目には、01~49のレベル番号を割り当てる。レコードは最も包括的なデータ項目なので、レコードのレベル番号は01から割り当てる。レベル番号01のデータ項目より下位のデータ項目のレベル番号は、連続している必要はない。
集団項目に従属するデータ項目のデータ記述項は、集団項目のデータ記述項の後に書く。集団項目は、その集団項目のレベル番号に等しいかより小さいレベル番号を持つデータ記述項が出てくるまでのすべてのデータ項目を包括する。集団項目に直接従属するデータ項目のレベル番号はすべて等しく、その集団項目のレベル番号より大きくなければならない。
5.3 ファイル記述項
ファイル記述項では、ファイルの物理的な構造を定義する。ファイル記述項は、ファイル節に書くことができ
る。
書き方1(順ファイル)
FD ファイル名-1
[ BLOCK CONTAINS句 ]
[ CODE-SET句 ]
[ DATA RECORDS句 ]
[ EXTERNAL句 ]
[ GLOBAL句 ]
[ LABEL RECORDS句 ]
[ RECORD句 ]
[ VALUE OF句 ].
書き方2(索引ファイル)
FD ファイル名-1
[ BLOCK CONTAINS句 ]
[ DATA RECORDS句 ]
[ EXTERNAL句 ]
[ GLOBAL句 ]
[ LABEL RECORDS句 ]
[ RECORD句 ]
[ VALUE OF句 ].
構文規則
- ファイル記述項の最初にレベル指示語FDを書き、その後にファイル名-1を書かなければならない。ファイル名-1の後に書く句の順序は任意である。
- ファイル記述項の後に、1つ以上のレコード記述項を書かなければならない。
(※) SIT COBOLは、CODE-SET句、DATA
RECORD句、EXTERNAL句、GLOBAL句、VALUE
OF句を未サポートである。(EXTERNAL句はサポート予定)
(※) SIT COBOLは、BLOCK CONTAINS句、LABEL
RECORDS句、RECORD句を注釈とみなす。
一般規則
- ファイル記述項は、ファイル名-1をファイル結合子に関連付ける。
- DATA RECORDS句、LABEL RECORDS句は、廃要素である。
5.3.1 BLOCK CONTAINS句
ブロックの大きさを指定する。
書き方
BLOCK CONTAINS [ 整数-1 TO ] 整数-2 { RECORD |
CHARACTERS }
一般規則
(※) SIT COBOLは、BLOCK CONTAINS句を注釈とみなす。
5.3.2 CODE-SET句(順ファイル)
外部記憶媒体上のデータ表現に使う文字符号を指定する。
書き方
CODE-SET IS 符号系名-1
一般形式
(※) SIT COBOLは、CODE-SET句を未サポートである。
5.3.3 DATA RECORD句
データレコードの名前を列挙する。
DATA
RECOREDS句は廃要素である。
書き方
DATA { RECORD IS | RECORDS ARE } {
データ名-1 } …
一般規則
(※) SIT COBOLは、DATA RECORD句を未サポートである。
5.3.4 EXTERNAL句
ファイル結合子に外部属性を与える
書き方
IS EXTERNAL
一般規則
EXTERNAL句は、関連するファイルのファイル結合子が、外部ファイル結合子であることを指定する。実行単位中の外部ファイル結合子は、ファイル名で対応付けられる。同じファイル名の外部ファイル結合子は、同じレコード領域を参照する。
(※) SIT COBOLは、EXTERNAL句を未サポートである。(サポート予定)
5.3.5 GLOBAL句
書き方
IS GLOBAL
一般規則
(※) SIT COBOLはGLOBAL句を未サポートである。
5.3.6 LABEL RECORDS句
ファイルのラベル有無を指定する。
LABEL
RECORDS句は廃要素である。
書き方
LABEL { RECORD IS | RECORDS ARE} {
STANDARD | OMITTED }
一般規則
(※) SIT COBOLは、LABEL RECORDS句を未サポートである。
5.3.7 RECORD句
レコードの大きさとレコードの形式を指定する。
書き方1(固定長レコード)
RECORD CONTAINS 整数-1 CHARACTERS
書き方2(可変長レコード)
RECORD IS VARYING IN SIZE
[[ FROM 整数-1 ] [ TO 整数-3 ] CHARACTERS ]
[ DEPENDING ON データ名-1 ]
書き方3
レコードの大きさと形式をデータ記述項で指定する書き方
RECORD CONTAINS
整数-4 TO 整数-5 CHARACTERS
構文規則
書き方1の規則
書き方1のRECORD句を指定したファイルに関連するレコード記述項で、文字位置の個数が整数-1を超えるレコードを定義することはできない。
(※) SIT COBOLは、書き方1のRECORD句を注釈とみなす。
書き方2の規則
- 書き方2のRECORD句を指定したファイルに関連するレコード記述項で、文字位置の個数が整数-2の値より小さいレコードを定義することはできない。また、文字位置の個数が整数-3の値より大きいレコードを定義することはできない。
- 整数-3は、整数-2より大きくなければならない。
- データ名-1は、作業場所節または連絡節で定義した符号なし整数項目でなければならない。
(※) SIT
COBOLは、可変長レコードは未サポートである。(サポート予定あり)
書き方3の規則
整数-5は、整数-4より大きくなければならない。
(※) SIT COBOLは、書き方3のRECORD句を注釈とみなす。
一般規則
書き方3およびRECORD句を省略した場合に共通する規則
- 書き方3のRECORD句を書いた場合、またはRECORD句を省略した場合、データレコードの大きさは、レコード記述項での記述に従って決定される。
- ファイルに関連するファイル結合子が外部ファイル結合子の場合、そのファイル結合子に
関連する、実行単位中のすべてのレコード記述項は、同じ長さでなければならない。
書き方2の規則
- 書き方2のRECORD句は、可変長レコードの大きさを定義するために使う。整数-2には、ファイルに関連するレコードの文字位置の個数の最小値を設定する。整数-3には、ファイルに関連するレコードの文字位置の個数の最大値を指定する。ただし、実行時にシステムによって文字位置の個数が指定される場合、その値が文字位置の個数の最大値になる。
- ファイルに関連するファイル結合子が外部ファイル結合子の場合、そのファイル結合子に関連する、実行単位中のすべてのファイル記述項では、整数-2および整数-3に対して同じ値を指定しなければならない。
- RECORD句で指定したレコードの大きさがレコード記述項の文字位置の個数より大きい場合、レコードを書き出すとき、レコード記述項の文字位置の個数を超える部分の内容は規定されない。
- 「レコード記述項の大きさ」とは、REDEFINES句またはRENAMES句を指定したデータ項目を除く、すべての基本項目の文字位置の個数の合計に、桁づめのための無名項目の文字位置の個数を加えた値である。レコード記述項にDEPENDING
ON指定付きのOCCURS句を書いた場合は、以下の規則に従って、レコード記述項の大きさの最小値と最大値が決定される。
- レコード記述項の大きさの最小値は、表要素の最小の個数を用いて決定される。
- レコード記述項の大きさの最大値は、表要素の最大の個数を用いて決定される。
- FROM指定を省略した場合、整数-2に、レコード記述項の大きさの最小値を指定したものとみなされる。
- TO指定を省略した場合、整数-3に、レコード記述項の大きさの最大値を指定したものとみなされる。
- DEPENDING
ON指定を書いた場合、データ名-1の値は以下のように使われれる。
- RELEASE文、REWRITE文またはWRITE文を実行する前に、書き出すレコードの文字位置の個数を、データ名-1に設定しなければならない。これらの文を実行するとき、書き出すレコードの文字位置の個数は、データ名-1の値によって決定される。
- READ文またはRETURN文の実行が成功すると、読み込まれたレコードの文字位置の個数がデータ名-1に設定される。
- READ文にINTO指定を書いた場合、暗黙のMOVE文の送出し側データ項目の文字位置の個数として、データ名-1に設定された値が使われる。
- DELETE文、RELEASE文、REWRITE文、START文またはWRITE文を実行しても、データ名
-1の値は変更されない。また、READ文またはRETURN文の実行が不成功だった場合も、データ名-1の値は変更されない。
- DEPENDING
ON指定を省略した場合、RELEASE文、REWRITE文またはWRITE文を実行するとき、書き出すレコードの文字位置の個数は、以下の規則に従って決定される。
- そのレコードが可変反復データ項目を含まない場合、そのレコードの文字位置の個数によって決定される。
- そのレコードが可変反復データ項目を含む場合、実行時の可変反復データ項目の反復回数(OCCURS句のDEPENDING
ON指定のデータ名の値)から算出される表の大きさと、可変反復データ項目以外のデータ項目の大きさとの合計によって決定される。
- DEPENDING
ON指定を省略し、READ文にINTO指定を書いた場合、暗黙のMOVE文の送出し側データ項目の文字位置の個数として、DEPENDING
ON指定を書いたときにデータ名-1に設定されるべき値が使われる。
5.3.8 VALUE OF句
ラベルレコード中のデータ項目の値を定義する。
VALUE
OF句は廃要素である。
書き方
VALUE OF { データ名-1 IS { データ名-2 | 定数-1 }} …
一般規則
(※) SIT COBOLは、VALUE OF句は未サポートである。
5.4 整列併合用ファイル記述項
整列併合用ファイル記述項では、整列併合用ファイルの物理的な構造を定義する。整列併合用ファイル記述項は、ファイル節に書くことができる。
書き方
SD ファイル名-1
[ DATA RECORD句 ]
[ RECORD句]
構文規則
- 整列併合用ファイル記述項の最初にレベル指示語SDを書き、その後にファイル名-1を書かなければならない。ファイル名-1の後に書く句の順序は任意である。
- 整列併合用ファイル記述項の後に、少なくとも1つのレコード記述項を書かなければならない。しかし、整列併合用ファイルに対して、入出力文を実行することはできない。
(※) SIT
COBOLでは、整列併合用ファイル記述項を定義できるが未サポートである。(サポート予定あり)
一般規則
- 整列併合用ファイルのDATA
RECORDS句の規則は、順ファイルの場合と同じである。
- 整列併合用ファイルのRECORD句の規則は、順ファイルの場合と同じである。
5.5 データ記述項
データ記述項では、データ項目を定義する。データ記述項は、基底場所節、ファイル節、作業場所節、および連絡節に書くことができる。データ記述項は、レコード記述項および独立データ記述項を構成する記述項である。
データ記述項には、データ名を定義する場合の書き方、データ名を再命名する場合の書き方、および条件名を定義する場合の書き方の3つの書き方がある。
書き方1
レベル番号 [ データ名-1 | FILLER ]
[ REDEFINES句 ]
[ BLANK WHEN ZERO句 ]
[ EXTERNAL句 ]
[ GLOBAL句 ]
[ JUSTIFIED句 ]
[ OCCURS句 ]
[ PICTURE句 ]
[ SIGN句 ]
[ SYNCHRONIZED句 ]
[ USAGE句 ]
[ VALUE句 ]
書き方2 データ名を再定義する
66 データ名-1
RENAMES句
書き方3 条件名を定義する
88 条件名-1
VALUE句
構文規則
書き方1の規則
- レベル番号は、01~49のいずれか、または77でなければならない。
- 書き方1のデータ記述項の先頭には、レベル番号を書かなければならない。データ名またはFILLERを書く場合、それらはレベル番号の直後に書かなければならない。REDEFINES句を書く場合、データ名またはFILLERを書くときはそれらの直後に書き、データ名またはFILLERを省略するときはレベル番号の直後に書かなければならない。その他の句は、任意の順序で書くことができる。
- 指標データ項目、単精度2進整数データ項、および倍精度2進整数データ項目以外の基本項目を定義する場合、PICTURE句を書かなければならない。指標データ項目、単精度2進整数データ項、および倍精度2進整数データ項目を定義する場合は、PICTURE句を書くことはできない。
- 集団項目を定義する場合、BLANK WHEN
ZERO句、JUSTIFIED句、PICTURE句およびSYNCHRONIZED句を書くことはできない。
- EXTERNAL句は、作業場所節のレベル番号が01のデータ記述項にだけ、書くことができる。
- EXTERNAL句とREDEFINES句は、同じデータ記述項に書くことはできない。
- GLOBAL句は、レベル番号が01のデータ記述項にだけ書くことができる。
- GLOBAL句またはEXTERNAL句を書く場合、データ名-1を書かなければならない。
- EXTERNAL句またはGLOBAL句を指定したファイル記述項に関連するレコード記述項を書く場合、データ名-1を書かなければならない。
書き方2の規則
書き方2のデータ記述項の先頭には、レベル番号66を書かなければならない。レベル番号の後に書く句の順序は、データ名-1、RENAMES句の順でなければならない。
書き方3の規則
書き方3のデータ記述項の先頭には、レベル番号88を書かなければならない。レベル番号の後に書く句の順序は、条件名-1、VALUE句の順でなければならない。
一般規則
書き方1の規則
- データ名-1には、データ項目の名前を指定する。明に参照しないデータ項目を定義する場合は、FILLERを用いる。
- データ名-1およびFILLERを省略した場合、FILLERを指定したものとみなされる。この項目を「無名項目」という。
- データ記述項でFILLERを用いて定義した項目を、「FILLER項目」という。FILLER項目は、直接参照することはできない。
- レベル指示語FDまたはSDの下位に、レベル番号01を持つ記述項が2つ以上従属している場合には、これらが同じ記憶領域を暗に再定義する。
書き方3の規則
- 書き方3のデータ記述項を「条件名記述項」という。条件名-1に条件の名前を指定し、VALUE句に条件名-1の値または値の範囲を指定する。
- 条件名記述項は、条件変数のデータ記述項の直後に書かなければならない。条件変数は、以下のデータ項目であってはいけない。
- 条件名
- レベル番号66のデータ項目
- JUSTIFIED 句、SYNCHRONIZED句、またはUSAGE IS
DISPLAY以外のUSAGE句を指定したデータ項目を従属する集団項目
- 指標データ項目
- 集団項目として定義された型、または条件名を含む型を参照するデータ記述項
ファイル節のレコード記述項での注意
ファイル節では、条件名記述項(レベル番号が88)以外のデータ記述項で、VALUE句を書いてはならない。ファイル節で定義したデータ項目の初期値は規定されない。
作業場所節のデータ記述項での注意
作業場所節で定義する指標データ項目以外のデータ項目には、初期値を与えることができる。初期値を与える場合、VALUE句を書く。VALUE句を省略した場合、データ項目の初期値は規定されない。
(※) SIT
COBOLは、VALUE句が省略されたデータ項目は、英数字属性のデータはSPACE(空白)が、数字属性のデータの場合はZEROが指定されたとみなされる。
連絡節のデータ記述項での注意
連絡節では、条件名記述項(レベル番号が88)以外のデータ記述項で、VALUE句を書いてはならない。連絡節で定義したデータ項目の初期値は規定されない。
5.5.1 BLANK WHEN ZERO句
データ項目の値がゼロのとき、値を空白に置き換える。
書き方
BLANK WHEN { ZERO | ZEROS | ZEROES }
構文規則
- BLANK WHEN ZERO句は、基本項目にだけ指定することができる。
- BLANK WHEN
ZERO句は、数字項目または数字編集項目にだけ指定することができる。
- 数字項目にBLANK WHEN
ZERO句を指定する場合、数字項目は符号なしの外部10進項目でな
ければならない。
- ZERO、ZEROSおよびZEROESは同義語である。
(※) SIT COBOLはBLANK WHEN
ZERO句は未サポートである。(サポート予定あり)
一般規則
- BLANK WHEN
ZERO句は、データ項目の値がゼロのとき、その値を空白に置き換えることを指定する。
- 数字項目にBLANK WHEN
ZERO句を指定した場合、その数字項目の項類は数字編集であると
みなされる。
5.5.2 EXTERNAL句
レコードに外部属性を与える。
書き方
IS EXTERNAL
構文規則
- EXTERNAL句は、作業場所節のレベル番号が01のデータ記述項にだけ、書くことができる。
- EXTERNAL句を指定したレベル番号01のデータ名は、同じプログラム中の、別のEXTERNAL句を指定したレベル番号01のデータ名と同じであってはならない。
- EXTERNAL句を書いたデータ記述項、またはそのデータ記述項に従属するデータ記述項に、VALUE句を書くことはできない。EXTERNAL句を書いたデータ記述項、またはそのデータ記述項に従属するデータ記述項に関連する条件名記述項には、VALUE句を書くことができる。
(※) SIT COBOLは、EXTERNAL句は未サポートである。(サポート予定あり)
一般規則
- EXTERNAL句は、レコードに外部属性を与える。EXTERNAL句を指定したデータ項目、およびそのデータ項目に従属するすべてのデータ項目に、外部属性が与えられる。
- レコード記述項にEXTERNAL句を指定したレコードを、「外部データレコード」という。実行単位中の外部データレコードは、レコード名で対応付けられる。同じレコード名の外部データレコードは、同じ記憶領域を参照する。同じレコード名の外部データレコードの文字位置の個数は、同じでなければならない。
- 外部データレコードをREDEFINES句の右辺に書くことができる。外部データレコードは、実行単位中の任意のプログラムで任意に再定義することができる。
5.5.3 GLOBAL句
データ名が大域名であることを指定する。
書き方
IS GLOBAL
(※) SIT COBOLは、GLOBAL句は未サポートである。
5.5.4 JUSTIFIED句
受取り側データ項目の右端に合わせて転記することを指定する。
書き方
{ JUSTIFIED | JUST } RIGHT
構文規則
- JUSTIFIED句は、基本項目にだけ指定することができる。
- JUSTIFIED句は、英字項目、英数字項目または日本語項目にだけ指定することができる。
- JUSTIFIEDとJUSTは同義語である。
(※) SIT
COBOLは、JUSTIFIED句は未サポートである。(サポート予定あり)
一般規則
- JUSTIFIED句は、受取り側データ項目の右端に合わせて転記することを指定する。
- 転記において、受取り側データ項目にJUSTIFIED句を指定した場合、送出し側のデータが受取り側データ項目の右端に合わせて格納される。送出し側データ項目と受取り側データ項目の大きさが異なる場合、以下の規則に従って転記される。
- 送出し側データ項目の大きさが受取り側データ項目の大きさより大きい場合、送出し側データ項目の左端の文字が切り捨てられる。
- 送出し側データ項目の大きさが受取り側データ項目の大きさより小さい場合、送出し側データ項目の左端の余りの部分に空白が埋められる。
- JUSTIFIED句を省略した場合、データを基本項目に格納するときの標準桁よせの規則が適用される。
5.5.5 OCCURS句
同じデータ構造の繰返し回数を指定する。
書き方1:
一定の繰り返し回数を指定する。
OCCURS 整数-2 TIMES
[ { ASCENDING | DESCENDING } KEY IS { データ名-2 } … ]
…
[ INDEXED BY { 指標名-1 } … ]
書き方2:
可変の繰り返し回数を指定する。
OCCURS [ 整数-1 ] TO 整数-2 TIMES
DEPENDING ON データ名-1
[ { ASCENDING | DESCENDING } KEY IS { データ名-2 } … ]
…
[ INDEXED BY { 指標名-1 } … ]
構文規則
書き方1および書き方2に共通する規則
- OCCURS句は、レベル番号が01、66、77または88のデータ記述項に指定することはできない。
- OCCURS句を指定したデータ項目に従属するデータ項目に、OCCURS DEPENDING
ON句を指定することはできない。
- データ名-1およびデータ名-2は、修飾することができる。
- KEY
IS指定を書く場合、データ名-2は以下の規則に従わなければならない。
- データ名-2は、OCCURS句を書いたデータ記述項自身のデータ名、またはそのデータ記述項に従属するデータ記述項のデータ名でなければならない。
- OCCURS句を書いたデータ記述項自身のデータ名をデータ名-2に指定する場合、データ名-2を2つ以上書くことはできない。
- データ名-2は、添字付けをしてはならない。
- データ名-2がOCCURS句を指定したデータ記述項およびそれに従属するデータ記述項の範囲内で一意でない場合、データ名-2を修飾しなければならない。
- OCCURS句を書いたデータ記述項自身のデータ名をデータ名-2に指定する場合を除き、データ名-2のデータ記述項にOCCURS句を書くことはできない。
- KEY
IS指定を書いたデータ記述項で、そのデータ記述項に従属するデータ記述項のデータ名をデータ名-2に指定した場合、KEY
IS指定を書いたデータ記述項とデータ名-2のデータ記述項の間に、別のKEY
IS指定付きのOCCURS句を持つデータ記述項を書くことはできない。
- データ名-2は、指標データ項目であってはならない。
- 指標名-1を指定したデータ項目、および指標名-1を指定したデータ項目に従属するデータ項目は、添字として指標名-1を付けて参照することができる。
- 指標名の記憶領域は、SIT
COBOLにより自動的に割り付けられる。指標名はデータではなく、データの階層にも属さない。
- EXTERNAL句が有効なデータ記述項に、INDEXED
BY指定付きのOCCURS句を書くことはできない。
書き方2の規則
- 整数-1は0以上でなければならない。整数-2は整数-1より大きくなければならない。整数-1が省略された場合、0が指定されたとみなす。
- データ名-1は、整数項目でなければならない。
- データ名-1は、OCCURS句を書いたデータ記述項の最初の文字位置から、そのデータ記述項を含むレコード記述項の最後の文字位置までの範囲内で定義することはできない。
- レコード記述項の中で、書き方2のOCCURS句を指定したデータ記述項の後には、そのデータ記述項に従属するデータ記述項しか書くことができない。
- EXTERNAL句を指定したレコード記述項に含まれるデータ記述項に、KEY
IS指定付きのOCCURS句を書く場合、データ名-1は外部属性を持つデータ項目でなければならない。また、そのデータ記述項とデータ名-1のデータ記述項は、同じデータ部に書かなければならない。
一般規則
書き方1および書き方2に共通する規則
- OCCURS句を指定したデータ記述項に書いた句は、反復されたそれぞれのデータ項目にも適用される。ただし、OCCURS句自身は、反復しては適用されない。
- OCCURS句を指定した集団項目が、SYNCHRONIZED句を指定した2進項目を従属する場合、その集団項目の各反復に対して、必要な遊びバイトがSIT
COBOLによって追加される。
- OCCURS句を指定したデータ項目の反復回数は、以下のとおりである。
- 書き方1では、整数-2の値が一定の反復回数を表す。
- 書き方2では、データ名-1のデータ項目の現在の値が、反復回数を表す。
- KEY
IS指定を書いた場合、その反復データは、データ名-2の値に従って、昇順(ASCENDINGを書いたとき)または降順(DESCENDINGを書いたとき)に並んでいなければならない。昇順および降順は、比較の規則に従って決められる。これらのデータ名は、キーの強さの順に左から右へ列挙する。
書き方2の規則
- 書き方2は、OCCURS句を指定したデータ項目の反復回数が可変であることを示す。最大の反復回数を、整数-2に指定する。最小の反復回数を、整数-1に指定する。書き方2は、OCCURS句を指定したデータ項目の大きさが可変なのではなく、反復回数が可変であることを意味する。書き方2のOCCURS句を指定したデータ項目を、「可変反復データ項目」という。
- OCCURS句を指定したデータ項目を参照した時点、またはOCCURS句を指定したデータ項目に従属するか従属されるデータ項目を参照した時点で、データ名-1の値は、整数-1以上かつ整数-2以下でなければならない。データ名-1の値を変化させたとき、整数-2より大きい出現番号を持つデータ項目の内容は、規定されない。
- 書き方2のOCCURS句を指定したデータ項目を従属する集団項目を参照する場合、OCCURS句を指定したデータ項目の表領域のうち、以下の部分が処理の対象となる。
- その集団項目がデータ名-1を従属しない場合、処理を開始したときのデータ名-1のデータ項目の値をnとすると、第1番目から第n番目までの表要素までの表領域が対象になる。
- その集団項目がデータ名-1を従属する場合、その集団項目が送出し側項目として用いられるときは、処理を開始したときのデータ名-1のデータ項目の値をnとすると、第1番目から第n番目までの表要素までの表領域が対象になる。その集団項目が受取り側項目として用いられるときは、整数-2が示す表領域が対象となる。
- レコード記述項に書き方2のOCCURS句を指定し、かつ関連するファイル記述項または整列併合用ファイル記述項のRECORD句にVARYING指定を書いた場合、そのレコードは可変長である。
- 書き方2のOCCURS句を指定したデータ項目を含むレコード記述項が、VARYING指定付きかつDEPENDING
ON指定なしのRECORD句を書いたファイル記述項または整列併合用ファイル記述項に関連する場合、RELEASE文、REWRITE文またはWRITE文の実行前に、データ名-1に反復回数を設定しなければならない。
5.5.6 PICTURE句
書き方
{ PICTURE | PIC } IS 文字列
構文規則
- PICTURE句は、基本項目にだけ指定することができる。
- PICTURE句の文字列は、COBOL文字集合に含まれる文字の特定の組合せで構成する。この組合せによって、基本項目の項類を指定する。
- PICTURE句の文字“A”、“B”、“E”、“N”、“P”、“S”、“V”、“X”、“Z”、“CR”および“DB”に対応する小文字は、PICTURE句の文字列において、それらの大文字と等価である。
- PICTURE句の文字列は、30文字以下でなければならない。(*1)
- PICTURE句は、指標データ項目、単精度/倍精度2進整数データ項目またはRENAMES句の左辺を除くすべての基本項目に指定しなければならない。指標データ項目またはRENAMES句の左辺に、この句を書くことはできない。
- PICTUREとPICは同義語である。
- PICTURE句の文字列にゼロ抑制記号の星印(*)を指定した場合、BLANK WHEN
ZERO句を指定することはできない。
(*1) SIT COBOLは、30文字以下の諸元はない。
一般規則
PICTURE句の文字の組み合わせと基本項目の項類
PICTURE句の文字の組合せにより、基本項目の項類を指定する。基本項目の項類には、英字、数字、英数字、英数字編集、数字編集、日本語、日本語編集がある。
- 項類が英字の基本項目を、「英字項目」という。英字項目を指定するときの規則、および英字項目の内容を以下に示す。
- PICTURE句の文字列は、文字“A”だけで構成する。
- 英字項目に指定できる用途は、DISPLAYだけである。
- 英字項目の内容は、1つ以上の英字でなければならない。
- 項類が数字の基本項目を、「数字項目」という。数字項目を定義するときの規則、および数字項目の内容を以下に示す。
- PICTURE句の文字列は、文字“9”、“P”、“S”および“V”の組合せで構成する。PICTURE句の文字列で表現できる数字の桁数は、1~18桁である。すなわち、文字“9”と“P”の個数の合計は、1~18でなければならない。
- 数字項目の用途は、DISPLAY、COMPUTATIONAL、BINARY、PACKED-DECIMALまたはCOMPUTATIONAL-5でなければならない。(*1)
- 数字項目に符号を指定しなかった場合、数字項目の内容は、1桁以上の数字でなければならない。数字項目に符号を指定した場合、数字項目の内容は、数字のほかに演算符号を含むことができる。
- 小数点以下の桁を持たない数字項目を、「整数項目」という。
数字項目には、上記の規則で定義される項目の他に単精度/倍精度2進整数データ項目がある。
- 項類が英数字の基本項目を、「英数字項目」という。英数字項目を定義するときの規則、および英数字項目の内容を以下に示す。
- PICTURE句の文字列は、文字“A”、“X”および“9”の組合せで構成する。PICTURE句の文字列に“X”以外の文字を含む英数字項目は、PICTURE句の文字列に“X”だけを指定した英数字項目と同じように扱われる。ただし、“A”だけまたは“9”だけからなるPICTURE句の文字列を持つデータ項目は、英数字項目ではない。
- 英数字項目に指定できる用途は、DISPLAYだけである。
- 英数字項目の内容は、計算機文字集合の1つ以上の文字でなければならない。
- 項類が英数字編集の基本項目を、「英数字編集項目」という。英数字編集項目を定義するときの規則、および英数字編集項目の内容を以下に示す。
- PICTURE句の文字列は、文字“A”、“X”、“9”、“B”、“0”および“/”の組合せで構成する。この文字列には、“A”または“X”のいずれか1つを指定し、かつ、“B”、“0”または“/”のいずれか1つを指定しなければならない。
- 英数字編集項目に指定できる用途は、DISPLAYだけである。
- 英数字編集項目の内容は、計算機文字集合の2つ以上の文字でなければならない。
- 項類が数字編集の基本項目を、「数字編集項目」という。数字編集項目を定義するときの規則、および数字編集項目の内容を以下に示す。
- PICTURE句の文字列は、文字“9”、“P”、“V”、“B”、“/”、“Z”、“0”、“,”、“.”、“*”、“+”、“-”、“CR”、“DB”および通貨編集用文字の組合せで構成する。この文字列には、“B”、“/”、“Z”、“0”、“,”、“.”、“*”、“+”、“-”、“CR”、“DB”または通貨編集用文字のうちのいずれか1つを指定しなければならない。1つのPICTURE句の文字列に、文字“P”と“.”の両方を指定することはできない。PICTURE句の文字列で表現できる数字の桁数は、1~18桁である。すなわち、文字“9”と“P”の個数の合計は、1~18でなければならない。
- 数字編集項目に指定できる用途は、DISPLAYだけである。
- 数字編集項目の各文字位置の内容は、PICTURE句の文字列と矛盾しないものでなければならない。
- 項類が日本語の基本項目を、「日本語項目」という。日本語項目を定義するときの規則、および日本語項目の内容を以下に示す。
- PICTURE句の文字列は、文字“N”だけで構成する。
- 日本語項目に指定できる用途は、DISPLAYだけである。
- 日本語項目の内容は、1つ以上の日本語文字でなければならない。
- 項類が日本語編集の基本項目を、「日本語編集項目」という。日本語編集項目を定義するときの規則、および日本語編集項目の内容を以下に示す。
- PICTURE句の文字列は、“N”および“B”の組合せで構成する。この文字列には、1つ以上の“N”および1つ以上の“B”を指定しなければならない。
- 日本語編集項目に指定できる用途は、DISPLAYだけである。
- 日本語編集項目の内容は、2つ以上の日本語文字でなければならない。
(*1) SIT COBOLは、COMPUTATIONAL, BINARY,
COMPUTATIONAL-5は未サポートである。(サポート予定あり)
PICTURE句の文字列の規則
- 標準データ形式で数えた基本項目の桁数を、「基本項目の大きさ」という。基本項目の大きさは、文字位置を表す文字の個数で決める。
- 文字“A”、“,”、“X”、“N”、“9”、“1”、“P”、“Z”、“*”、“B”、“/”、“0”、“+”、“-”および通貨編集用文字は、同じ文字を繰り返して使うことができる。同じ文字を繰り返す場合、その文字の次に、その文字の反復回数を括弧で囲んで指定する。反復回数は、1以上の符号なし整数でなければならない。同じ文字を連続して書いたものと、反復回数を括弧で囲んで記述したものは等価である。例えば、“999”は“9(3)”と等価である。
- 文字“S”、“V”、“.”、“CR”および“DB”は、1つのPICTURE句の文字列中に1つしか書くことができない。
PICTURE句の文字の意味
- “A”は、英字または空白だけを含む1個の文字位置を示す。“A”は、基本項目の大きさに数える。
- “B”は、空白を挿入すべき1個の文字位置、または日本語の空白を挿入すべき1個の日本語文字位置を示す。“B”は、基本項目の大きさに数える。
- “P”は、想定した位取りを示す。“P”は、基本項目の大きさに数える。“P”は、PICTURE句の数字の桁位置の左端または右端に続けて書かなければならない。PICTURE句の数字の桁位置の左端に“P”を書いた場合、先頭の“P”の左側に想定小数点があるものとみなされる。PICTURE句の数字の桁位置の右端に“P”を書いた場合、最後の“P”の右側に想定小数点があるものとみなされる。どちらの場合も、想定小数点の位置を示す文字“V”を省略することができる。
- “S”は、演算符号が存在することを示す。“S”は、PICTURE句の文字列の先頭に書かなければならない。SIGN句にSEPARATE
CHARACTER指定を書いた場合、“S”は基本項目の大きさに数える。SIGN句にそれ以外の指定を書いた場合またはSIGN句を省略した場合、“S”は基本項目の大きさに数えない。“S”は演算符号の表現形式および演算符号の位置を示すものではない。
- “V”は、想定小数点の位置を示す。“V”は、PICTURE句の文字列に1つしか書くことができない。“V”は、文字位置を表すものではないので、基本項目の大きさには数えない。桁位置または桁合わせ位置を表すPICTURE句の文字列(PまたはPの繰返し)の右端に想定小数点がある場合は、“V”を省略することができる。
- “X”は、1個の文字位置を示す。“X”の文字位置は、計算機文字集合で許される任意の文字を含むことができる。“X”は、基本項目の大きさに数える。
- “N”は、1個の日本語文字位置を示す。“N”の日本語文字位置は、任意の日本語文字を含むことができる。“N”は、基本項目の大きさに数える。
- “Z”は、先行ゼロ列(有効な数字より上位の桁)を空白に置き換えることを示す。“Z”は、1個の文字位置として基本項目の大きさに数える。
- “9”は、数字を含む1個の桁位置を示す。“9”は、基本項目の大きさに数える。
- “1”は、ブール文字を含む1個のブール位置を示す。“1”は、基本項目の大きさに数える。
- “0”は、数字のゼロを挿入すべき1個の文字位置を示す。“0”は、基本項目の大きさに数える。
- “/”は、文字“/”を挿入すべき1個の文字位置を示す。“/”は、基本項目の大きさに数える。
- “,”(コンマ)は、文字“,”を挿入すべき1個の文字位置を示す。“,”は、基本項目の大きさに数える。
- “.”(小数点)は、文字“.”を挿入すべき1個の文字位置を示す。“.”は、データ項目の桁合わせの基準とする小数点の位置も示す。“.”は、基本項目の大きさに数える。特殊名段落にDECIMAL-POINT
IS
COMMA句を書いた場合、プログラムに書いたPICTURE句の文字列および数字定数において、小数点とコンマの機能が入れ替わる。この場合、PICTURE句の“.”に関する規則をコンマに適用し、“,”に関する規則を小数点に適用する。(*1)
- “+”、“-”、“CR”および“DB”は、正負を表す文字を格納すべき文字位置を示します。これらの文字を、「符号編集用文字」とくいう。1つのPICTURE句の文字列には、これらのうちの1種類しか指定できない。“+”および“-”は、1個の文字位置として、基本項目の大きさに数える。“CR”および“DB”は、2個の文字位置として、基本項目の大きさに数える。
- “*”は、先行ゼロ列(有効な数字より上位の桁)を“*”に置き換えることを示す。“*”は、1個の文字位置として、基本項目の大きさに数える。
- 通貨編集用文字は、通貨編集用文字を格納すべき1個の文字位置を示す。「通貨編集用文字」とは、特殊名段落のCURRENCY
SIGN句で指定した文字のことである。CURRENCY
SIGN句を省略した場合は、通貨記号が通貨編集用文字になる。通貨編集用文字は、1個の文字位置として、基本項目の大きさに数える。(*2)
- “E”は、外部浮動小数点項目の指数部の開始を示す。“E”は、1個の文字位置として、基本項目の大きさに数える。
(*1) SIT COBOLは、DECIMAL-POINT IS
MOMMA句は未サポートである。(サポート予定あり)
(*2) SIT
COBOLは、CURRENCY SIGN句は未サポートである。(サポート予定あり)
“P”を含むデータ項目の規則
- “P”を含むデータ項目を以下の場所に書いた場合、データ項目の値として、実際の文字表現ではなく代数値が用いられる。代数値とは、“P”の位置によって決まる位置に小数点を想定し、“P”を書いた桁位置にゼロを想定した値である。代数値の大きさは、PICTURE句の文字列によって表される桁位置の数、すなわち“P”と“9”の個数の合計である。
- 送出し側作用対象が数字項目の転記で、送出し側作用対象に“P”を含む数字項目を指定した場合
- MOVE文の送出し側作用対象に“P”を含む数字項目を指定した場合
- MOVE文の送出し側作用対象に“P”を含む数字編集項目を指定し、受取り側作用対象に数字項目または数字編集項目を指定した場合
- 両作用対象が数字項目の比較で、少なくともどちらか一方の作用対象に“P”を含む数字項目を指定した場合
上記以外の場所に“P”を含むデータ項目を書いた場合は、“P”を書いた桁位置は無視され、その作用対象の大きさに数えない。
編集項目の編集規則
PICTURE句の文字列では、挿入およびゼロ抑制の2種類の編集方法を指定することができる。数字編集項目のPICTURE句の文字列では、以下の1つ以上の編集方法を指定する。
数字編集項目の編集方法
|
挿入
|
単純挿入
|
|
特殊挿入
|
|
固定挿入
|
|
浮動挿入
|
ゼロ抑制
|
空白によるゼロ抑制
|
|
星印”*“によるゼロ抑制
|
英数字編集項目のPICTURE句の文字列では、空白、“0”または“/”の単純挿入を指定する。日本語編集項目のPICTURE句の文字列では、日本語の空白の単純挿入を指定する。
単純挿入
- 「単純挿入」とは、PICTURE句の文字列で指定した挿入文字の位置に、“,”、空白、“0”または“/”を挿入する方法である。単純挿入を行う場合、PICTURE句の文字列に、挿入文字として“,”、“B”、“0”または“/”を書く。これらの挿入文字を、「単純挿入文字」という。単純挿入文字の“B”は、空白を挿入することを意味する。単純挿入文字は、挿入すべき文字の位置を表す。
- PICTURE句の文字列の最後に“,”を書く場合、PICTURE句は、そのデータ記述項の最後の句でなければならない。また、PICTURE句の文字列の直後に、分離符の終止符を書かなければならない。この結果、データ記述項に“,.”が現れ、DECIMAL-POINT
IS COMMA句を書くと、2つの連続した終止符“..”が現れる。
特殊挿入
- 「特殊挿入」とは、PICTURE句の文字列で指定した挿入文字の位置に、小数点を挿入する方法である。特殊挿入を行う場合、PICTURE句の文字列に、挿入文字として“.”を書く。この挿入文字は、単純挿入文字の1つとして扱われる。“.”は、挿入文字であるばかりでなく、実際の小数点の位置も表す。1つのPICTURE句の文字列に、“.”と“V”の両方を書くことはできない。
- PICTURE句の文字列の最後に“.”を書く場合、PICTURE句は、そのデータ記述項の最後の句でなければならない。また、PICTURE句の文字列の直後に、分離符の終止符を書かなければならない。この結果、データ記述項に2つの連続した終止符“..”が現れ、DECIMAL-POINT
IS COMMA句を書くと“,.”が現れる。
固定挿入
- 「固定挿入」とは、PICTURE句の文字列で指定した挿入文字の位置に、データ項目の値に従って、挿入文字に対応する文字を挿入する方法である。固定挿入を行う場合、PICTURE句の文字列に、挿入文字として通貨編集用文字および符号編集用文字(“+”、“-”、“CR”または“DB”)を書く。これらの挿入文字を、「固定挿入文字」とくいう。1つのPICTURE句の文字列には、通貨編集用文字と符号編集用文字をそれぞれ1個ずつしか書くことができない。
- PICTURE句の文字列での“CR”および“DB”の位置は、基本項目の大きさに数える文字位置の最右端でなければならない。
- PICTURE句の文字列での“+”および“-”の位置は、基本項目の大きさに数える文字位置の左端または右端でなければならない。
- 通貨編集用文字の位置は、“+”または“-”が通貨編集用文字に先行する場合を除いて、基本項目の大きさに数える文字位置の左端でなければならない。
- PICTURE句の文字列に書いた通貨編集用文字の位置には、通貨編集用文字が挿入される。PICTURE句の文字列に書いた符号編集用文字の位置には、データ項目の値に従って、下表に示す文字が挿入される。
PICTURE句の文字列に書いた符号編集用文字
|
編集の結果挿入される文字
|
データ項目の値が正またはゼロの場合
|
データ項目の値が負の場合
|
+
|
+
|
-
|
-
|
空白1個
|
-
|
CR
|
空白2個
|
CR
|
DB
|
空白2個
|
DB
|
浮動挿入
- 「浮動挿入」とは、PICTURE句の文字列で指定した連続する挿入文字の位置に、データ項目の値に従って、挿入文字に対応する文字を挿入する方法である。浮動挿入を行う場合、PICTURE句の文字列に、挿入文字として、2つ以上の連続する通貨編集用文字、2つ以上の連続する“+”、または2つ以上の連続する“-”を書く。これらの挿入文字を、「浮動挿入文字」とくいう。1つのPICTURE句の文字列に、“+”と“-”の両方を書くことはできない。
- 浮動挿入文字列の間、または浮動挿入文字列のすぐ右側に、単純挿入文字を書くことができる。これらの単純挿入文字は、浮動挿入文字列の一部とみなされる。
- 浮動挿入文字として通貨編集用文字を書く場合、浮動挿入文字列のすぐ右側に、固定挿入文字の“CR”または“DB”を書くことができる。
- 浮動挿入文字列の最左端の文字は、浮動挿入文字を挿入する最左端の文字位置を示す。浮動挿入文字列の最右端の文字は、浮動挿入文字を挿入する最右端の文字位置を示す。浮動挿入文字列の左から2番目の文字は、データ項目の中で数字データを格納することができる最左端の文字位置を示す。
- PICTURE句の文字列の整数部に対応する数字位置の先頭の一部、または整数部に対応する数字位置の全部を挿入文字で指定した場合、浮動挿入の結果は以下のようになる。
- データ項目の整数部の値がゼロの場合、小数点のすぐ左側の文字位置に挿入文字1個が挿入される。挿入文字より左側の文字位置には、空白が挿入される。
- データ項目の整数部の値がゼロでない場合、整数部のゼロでない最初の数字のすぐ左側の文字位置に挿入文字1個が挿入される。挿入文字より左側の文字位置には、空白が挿入される。
- PICTURE句の文字列の数字位置を全部挿入文字で指定した場合、浮動挿入の結果は以下のようになる。
- データ項目の値がゼロの場合、データ項目全体に空白が挿入される。
- データ項目の値がゼロでない場合、小数点または整数部のゼロでない最初の数字のうちの左にあるもののすぐ左側の文字位置に、挿入文字1個が挿入される。挿入文字より左側の文字位置には、空白が挿入される。
- PICTURE句の文字列に書いた通貨編集用文字の位置には、通貨編集用文字が挿入される。PICTURE句の文字列に書いた“+”または“-”の位置には、データ項目の値に従って、下表に示す文字が挿入される。
PICTURE句の文字列に書いた符号編集用文字
|
編集の結果挿入される文字
|
データ項目の値が正またはゼロの場合
|
データ項目の値が負の場合
|
+
|
+
|
-
|
-
|
空白1個
|
-
|
- 数字編集項目を受取り側とする転記で切捨てが起こらないようにするためには、受取りデータ項目のPICTURE句の文字列の文字数は、以下の3つを加えたもの以上でなければならない。
- 送出し側データ項目の文字数
- 受取り側データ項目のPICTURE句の文字列に指定した固定挿入文字の文字数
- 浮動挿入文字のための1文字
切捨てが起こった場合、編集のために用いられるデータの値は、切捨て後の値になる。
ゼロ抑制
- 「ゼロ抑制」とは、数字位置の先行ゼロ列(有効な数字より上位の桁)を空白または“*”(星印)で置き換えることである。ゼロ抑制を行う場合、PICTURE句の文字列に、1つ以上の連続する“Z”、または1つ以上の連続する“*”を書く。これらの文字を、「ゼロ抑制文字」とくいう。ゼロ抑制文字は、先行ゼロ列を置き換えるべき数字位置を示しす。PICTURE句の文字列で“Z”または“*”を書いた数字位置は、それぞれ空白または“*”で置き換えられる。1つのPICTURE句の文字列に、“Z”と“*”の両方を書くことはできない。
- ゼロ抑制文字列の間、またはゼロ抑制文字列のすぐ右側に、単純挿入文字を指定することができる。これらの単純挿入文字は、ゼロ抑制文字列の一部とみなされる。
- PICTURE句の文字列の整数部に対応する数字位置の先頭の一部、または整数部に対応する数字位置の全部をゼロ抑制文字で指定した場合、ゼロ抑制の結果は以下のようになる。
- データ項目の整数部の値がゼロの場合、小数点のすぐ左側までの先行ゼロ列が、空白または“*”で置き換えられる。
- データ項目の整数部の値がゼロでない場合、整数部のゼロでない最初の数字のすぐ左側までの先行ゼロ列が、空白または“*”で置き換えられる。
- PICTURE句の文字列の数字位置を、全部ゼロ抑制文字で指定した場合、ゼロ抑制の結果は以下のようになる。
- データ項目の値がゼロの場合は、以下のとおりである。
- ゼロ抑制文字として“Z”を書いた場合、データ項目全体が空白で置き換えられる。
- ゼロ抑制文字として“*”を書き、単純挿入文字“.”を書かなかった場合、データ項目全体が“*”で置き換えられる。
- ゼロ抑制文字として“*”を書き、単純挿入文字“.”を書いた場合、“.”以外の文字位置が“*”で置き換えられ、“.”の文字位置に小数点が置かれる。
- データ項目の値がゼロでない場合、小数点または整数部のゼロでない最初の数字のうちの左にあるもののすぐ左側までの先行ゼロ列が、空白または“*”で置き換えられる。
浮動挿入とゼロ抑制の組み合わせ
1つの数字編集項目に対して、浮動挿入とゼロ抑制の両方を指定することはできない。また、2種類のゼロ抑制の両方を指定することもできない。したがって、文字“+”、“-”、“*”、“Z”および通貨編集用文字を浮動挿入文字またはゼロ抑制文字として使う場合、このうちの1種類しか書くことはできない。
PICTURE句の文字列の順序規則
PICTURE句の文字列の順序規則を、下表に示す。PICTURE句の文字列に書くことができる文字は、項類によって異なる。項類ごとに、表の規則を適用してください。表の見かたを、以下に示す。
○:
|
その列の上段に示した文字をその行の左側に示した文字の前(直前でなくてもよい)に書いてもよいことを示す。
|
-:
|
その列の上段に示した文字をその行の左側に示した文字の前に書いてはいけないことを示す。
|
左:
|
小数点の左側に、先行文字または後続文字を書いた場合を示す。
|
右:
|
小数点の右側に、先行文字または後続文字を書いた場合を示す。
|
略
5.5.7 REDEFINES句
同じ記憶領域に異なるデータ項目を定義する。
書き方
レベル番号 [ データ名-1 | FILLER ] REDEFINES データ名-2
(注)
レベル番号、データ名-1およびFILLERは、書き方を明確にするために示してあるだけで、REDEFINES句の一部ではない。
構文規則
- REDEFINES句は、レベル番号、データ名-1またはFILLERの直後に書かなければならない。
- データ名-2とREDEFINES句の左辺のレベル番号は、同じでなければならない。レベル番号は、66または88であってはいけない。
- ファイル節のレコード記述項を2つ以上書くと、レコード記述項の領域が暗に再定義される。ファイル節のレベル番号が01のデータ記述項に、REDEFINES句を書くことはできない。
- データ名-2のデータ記述項に、OCCURS句を書くことはできない。データ名-2のデータ記述項は、OCCURS句を書いたデータ記述項に従属することができる。データ名-2のデータ記述項、REDEFINES句を書いたデータ記述項、およびそれらのデータ記述項に従属するデータ記述項に、DEPENDING
ON指定付きのOCCURS句を書くことはできない。
- レベル番号が01以外のデータ記述項にREDEFINES句を書く場合、またはデータ名-2が外部データレコードのレコード名の場合、データ名-2のデータ項目の文字位置の個数は、REDEFINES句の左辺によって参照されるデータ項目の文字位置の個数より大きいか等しくなければならない。レベル番号が01のデータ記述項にREDEFINES句を書き、かつ、データ名-2に外部データレコードのレコード名でないデータ名を指定する場合は、このような制限はない。
- データ名-2のデータ記述項とREDEFINES句を書いたデータ記述項の間には、データ名-2のレベル番号より小さいかまたはREDEFINES句の左辺のレベル番号より小さいレベル番号を指定したデータ記述項を書くことはできない。
- 同じ文字位置を重複して再定義することができる。同じ文字位置を重複して再定義する場合は、データ名-2は、その文字位置を最初に定義したデータ記述項のデータ名でなければならない。
- REDEFINES句を書いたデータ記述項に、VALUE句を書くことはできない。ただし、そのデータ記述項に関連する条件名記述項には、VALUE句を書くことができる。
- データ名-2のデータ項目は、REDEFINES句を指定したデータ項目に従属することができる。
一般規則
- REDEFINES句を指定したデータ項目には、データ名-2の記憶領域の先頭から始まる、REDEFINES句を指定したデータ項目の大きさ分の記憶領域が割り当てられる。
- 同じ文字位置を2つ以上のデータ記述項によって定義した場合、どのデータ記述項のデータ名も、その文字位置を参照するために用いることができる。
- REDEFINES句を指定したデータ項目、またはそのデータ項目に従属する最初の基本項目にSYNCHRONIZED句を指定した場合、データ名-2は、SYNCHRONIZED句で指定した固有の境界に合わせて定義しなければならない。たとえば、以下の場合、Aは半語境界から始まらなければならない。
000000 02 A PIC X(2).
000000 02 B REDEFINES A PIC S9(4) BINARY SYNCHRONIZED.
5.5.8 RENAMES句
いくつかの基本項目をまとめたものに名前を付ける。
書き方
66 データ名-1 RENAMES データ名-2 [ { THROUGH |
THRU } データ名-3 ]
(注)
一般形式中のレベル番号およびデータ名-1は、書き方を明確にするために示しているだけでRENAMES句の一部ではない。
構文規則
- RENAMES句を書いたデータ記述項を、「RENAMES記述項」という。RENAMES記述項は、1つのレコード記述項の中にいくつでも書くことができる。
- データ名-2およびデータ名-3は、同じレコード記述項中の基本項目または集団項目の名前でなければならない。データ名-2およびデータ名-3は、同じ名前であってはならない。データ名-2およびデータ名-3は、レベル番号が77、88、01または66のデータ記述項で定義したデータ名であってはならない。
- RENAMES記述項は、レコード記述項の最後のデータ記述項の直後にまとめて書かなければならない。
- データ名-1を修飾語として使用することはできない。
- データ名-1を修飾できるのは、RENAMES記述項を含むレコード記述項中の01レベルのデータ記述項、ファイル記述項または整列併合用ファイル記述項の名前だけである。
- データ名-2およびデータ名-3は、OCCURS句を指定したデータ項目、またはそのようなデータ項目に従属するデータ項目であってはならない。
- データ名-2およびデータ名-3は、修飾することができる。(*1)
- データ名-2またはデータ名-3がRENAMES記述項を含むレコード記述項の中で一意でない場合、データ名-2またはデータ名-3を修飾しなければならない。(*1)
- データ名-2からデータ名-3までの範囲内に、可変反復データ項目を定義することはできない。
- THROUGHとTHRUは同義語である。
- データ名-3のデータ項目は、データ名-2のデータ項目に従属してはならない。
- データ名-3の領域の左端は、データ名-2の領域の左端より左にあってはならない。データ名-3の領域の右端は、データ名-2の領域の右端より右になければならない。
(*1) SIT COBOLは、修飾することはできない。(制限解除予定)
一般規則
- データ名-3を書くと、データ名-1は集団項目になる。この集団項目は、以下の範囲のデータ項目を従属する。
- 集団項目に従属する最初の基本項目は、データ名-2が基本項目の場合はデータ名-2、データ名-2が集団項目の場合はデータ名-2に従属する最初の基本項目である。
- 集団項目に従属する最後の基本項目は、データ名-3が基本項目の場合はデータ名-3、データ名-3が集団項目の場合はデータ名-3に従属する最後の基本項目である。
- データ名-3を省略した場合、データ名-2のデータ属性がすべてデータ名-1のデータ属性になる。
5.5.9 SIGN句
演算符号の位置と表現形式を指定する。
書き方
[ SIGN IS ] { LEADING | TRAILING } [
SEPARATE CHARACTER ]
構文規則
- SIGN句は、PICTURE句の文字列に文字“S”を指定した数字項目、またはそのような数字項目を少なくとも1つ含む集団項目にだけ指定することができる。
- SIGN句が適用される数字項目の用途は、表示用でなければならない。
一般規則
- SIGN句は、数字項目の符号の位置と表現形式を指定する。SIGN句を基本項目に指定した場合、SIGN句はその基本項目に適用される。SIGN句を集団項目に指定した場合、SIGN句は集団項目に従属するすべての符号付き数字項目に対して適用される。PICTURE句の文字列の“S”で符号の存在を指定し、符号の表示形式と位置はSIGN句で指定する。
- SIGN句を指定した集団項目に従属する集団項目にSIGN句を指定した場合、従属する集団項目に対しては、そこで指定したSIGN句が適用される。
- SIGN句を指定した集団項目に従属する数字項目にSIGN句を指定した場合、数字項目に対しては、そこで指定したSIGN句が適用される。
- PICTURE句の文字列に“S”を指定した数字項目にSIGN句を指定しなかった場合、SIGN句にTRAILINGだけを書いたものとみなされる。
- SEPARATE CHARACTERを省略した場合の符号の規則を、以下に示す。
- 演算符号は、LEADINGを書いた場合は左端の桁位置、TRAILINGを書いた場合は右端の桁位置に付きく。
- PICTURE句の文字列の“S”は、データ項目の大きさには数えない。
- SEPARATE CHARACTERを書いた場合の符号の規則を、以下に示す。
- 演算符号は、LEADINGを書いた場合は左端の桁位置、TRAILINGを書いた場合は右端の桁位置に付く。演算符号の文字位置は、桁位置とは別の文字位置を占有する。
- PICTURE句の文字列の中の文字“S”は、標準データ形式におけるデータ項目の大きさに数える。
- 正と負の演算符号は、標準データ形式の“+”と“-”である。
- 演算符号の文字位置に“+”または“-”を設定していない場合の実行結果は規定されない。
- SIGN句を指定した数字項目を計算や比較で使う場合、変換が行われることがある。この変換は、自動的に行われる。
5.5.10 SYNCHRONIZED句
計算機の記憶装置の固有の境界に従って、基本項目を配置することを指定する。
書き方
{ SYNCHRONIZED | SYNC } [ LEFT | RIGHT
]
構文規則
- SYNCHRONIZED句は、基本項目にだけ指定することができる。
- SYNCHRONIZEDはSYNCと同義語である。
(※) SIT COBOLは、SYNCHRONIZED句をメモとして扱う。
5.5.11 USAGE句
データ項目の用途を指定する。
書き方
[ USAGE IS ]
{ BINARY | COMPUTATIONAL | COMP |
COMPUTATIONAL-1 | COMP-1 |
COMPUTATIONAL-2 | COMP-2 | COMPUTATIONAL-3 |
COMP-3 |
COMPUTATIONAL-5 | COMP-5 | DISPLAY |
INDEX | PACKED-DECIMAL }
構文規則
- USAGE句は、レベル番号が66または88以外のデータ記述項に書くことができる。
- USAGE句を集団項目のデータ記述項に書く場合、従属する基本項目または集団項目のデータ記述項にもUSAGE句を書くことができる。その場合、両方のデータ記述項に同じUSAGE句を書かなければならない。
- USAGE句で以下を指定した基本項目、およびUSAGE句で以下を指定した集団項目に従属する基本項目は、数字項目でなければならない。すなわち、PICTURE句の文字列を“P”、“S”、“V”および“9”だけで構成しなければならない。
- BINARY
- COMPUTATIONALまたはCOMP
- COMPUTATIONAL-5またはCOMP-5
- PACKED-DECIMAL、COMPUTATIONAL-3またはCOMP-3
- 以下の2つの組の語は、それぞれ同義語である。どちらを書いてもかまわない。
- COMPUTATIONALとCOMP
- COMPUTATIONAL-1とCOMP-1
- COMPUTATIONAL-2とCOMP-2
- COMPUTATIONAL-3とCOMP-3
- COMPUTATIONAL-5とCOMP-5
- USAGE IS INDEX句を指定した基本項目、およびUSAGE IS
INDEX句を指定した集団項目に従属する基本項目は、以下の場所にだけ書くことができる。
- SEARCH文
- SET文
- DISPLAY文
- 比較条件
- 手続き部の見出しまたはENTRY文のUSING指定
- CALL文のUSING指定
- USAGE IS
INDEX句を書いたデータ記述項、およびそのデータ記述項に従属するデータ記述項に、以下の句を書くことはできない。
- BLANK WHEN ZERO句
- JUSTIFIED句
- PICTURE句
- SYNCHRONIZED句
- VALUE句
- USAGE IS
INDEX句を指定した基本項目に、条件名記述項を関係付けてはならない。
- USAGE句にCOMPUTATIONAL-1、COMP-1、COMPUTATIONAL-2またはCOMP-2を書いたデータ記述項、およびそのデータ記述項に従属するデータ記述項に、以下の句を書くことはできない。
- BLANK WHEN ZERO句
- JUSTIFIED句
- PICTURE句
- VALUE句
(※) SIT COBOLは、BINARY, COMPUTATIONAL-5,
COMP-5は未サポートである。(サポート予定あり)
一般規則
- USAGE句を集団項目に指定した場合、USAGE句は、集団項目に従属するすべての基本項目に適用される。
- USAGE句は、データ項目の用途を指定する。USAGE句の記述によって記憶領域内のデータ項目の表現形式が決められる。
- 数字項目の内部表現は、USAGE句の記述によって決められる。下表に、数字項目の内部表現を示す。
USAGE句
|
SIGN句
|
PICTURE句
|
値
|
内部表現
|
備考
|
DISPLAY (外部10進)
|
なし
|
9(4)
|
6789
|
36373839
|
3:ゾーンビット/正の演算符号 7:負の演算符号
|
S9(4)
|
+6789
|
36373839
|
-6789
|
36373879
|
LEADING
|
S9(4)
|
+6789
|
36373839
|
-6789
|
76373839
|
TRAILING
|
S9(4)
|
+6789
|
36373839
|
-6789
|
36373879
|
LEADING SEPARATE
|
S9(4)
|
+6789
|
2B36373839
|
2B:標準データ形式の”+“ 2D:標準データ形式の”-“
|
-6789
|
2D36373839
|
TRAILING SEPARATE
|
S9(4)
|
+6789
|
363738392B
|
-6789
|
363738392D
|
BINARY
|
—
|
9(4)
|
1234
|
04D2
|
左端ビットが演算符号を表す。 0: 正、1:
負 負の値は2の補数で表現される。
|
S9(4)
|
+1234
|
04D2
|
-1234
|
FB2E
|
PACKED-DECIMAL (内部10進)
|
—
|
9(4)
|
1234
|
01234F
|
F: 絶対値を表す演算符号 C: 正の演算符号 D: 負の演算符号
|
S9(4)
|
+1234
|
01234C
|
-1234
|
01234D
|
“—”:指定できない組み合わせ
- 基本項目または基本項目を従属する集団項目にUSAGE句を指定しなかった場合、USAGE
IS DISPLAY句を指定したものとみなされる。USAGE IS
DISPLAY句が有効なデータ項目を、「用途が表示用のデータ項目」という。
- USAGE IS
DISPLAY句は、データ項目を記憶装置内で標準データ形式で表現すること、およびデータ項目を文字境界に桁よせすることを表す。USAGE
IS
DISPLAY句を明にまたは暗に指定したデータ項目の内容は、文字位置すなわちバイトを単位として扱われる(1)。標準データ形式のデータ項目が占める記憶領域の大きさを、「文字位置の個数」という。文字位置の個数は、バイト数と等価である(1)。
- USAGE IS
DISPLAY句は、英字項目、英数字項目、英数字編集項目、数字編集項目、数字項目、日本語項目、日本語編集項目に指定することができる。また、USAGE
IS
DISPLAY句を集団項目に指定した場合、集団項目に従属する基本項目のうち、これらの基本項目にUSAGE
IS DISPLAY句が適用される。
- USAGE IS
DISPLAY句を明にまたは暗に指定した数字項目を、「外部10進項目」という。外部10進項目の各数字の桁位置は、文字位置すなわちバイトを単位として表現される。(*1)
- 外部10進項目のPICTURE句の文字列に文字“S”を指定した場合、SIGN句の記述に従って、演算符号が以下のように表現される。SIGN句を省略した場合は、SIGN
IS TRAILING句を指定した場合と同じである。
- SIGN IS
LEADING句を指定した場合、先頭の桁位置の上位4ビットに、演算符号が含まれる。
- SIGN IS
TRAILING句を指定した場合、最後の桁位置の上位4ビットに、演算符号が含まれる。
- SIGN IS LEADING SEPARATE
CHARACTER句を指定した場合、先頭の桁位置の直前の文字位置に、標準データ形式の“+”または“-”が置かれる。
- SIGN IS TRAILING SEPARATE
CHARACTER句を指定した場合、最後の桁位置の直後の文字位置に、標準データ形式の“+”または“-”が置かれる。
- USAGE IS COMPUTATIONAL、USAGE IS COMP、USAGE IS
DISPLAYは同義である。
- USAGE IS COMPUTATIONAL-5句およびUSAGE IS
BINARY句を明にまたは暗に指定した数字項目を、「2進項目」という。2進項目に割り付けられる記憶領域の大きさは、PICTURE句で指定した桁数によって、以下のように決まる。
1~4桁の場合:
|
2バイト
|
5~9桁の場合:
|
4バイト
|
10~18桁の場合:
|
8バイト
|
- USAGE IS
INDEX句を明にまたは暗に指定した基本項目を、「指標データ項目」という。指標データ項目は、表要素の出現番号に対応する値を持つ。指標データ項目には、SET文などにより、指標名に対応する値がそのまま格納される。指標データ項目の大きさは4バイトである。
- 集団項目にUSAGE IS
INDEX句を指定した場合、集団項目に従属する基本項目は、すべて指標データ項目になる。しかし、USAGE
IS INDEX句を指定した集団項目そのものは、指標データ項目ではない。
- MOVE文または入出力文に、指標データ項目を従属する集団項目を指定した場合、指標データ項目の変換は行われない。
- USAGE IS
PACKED-DECIMAL句を明にまたは暗に指定した数字項目を、「内部10進項目」という。内部10進項目には、最後のバイト以外の各バイトに2桁の数字が含まれ、最後のバイトの下位4ビットに演算符号が含まれる。
- USAGE IS COMPUTATIONAL-1句またはUSAGE IS
COMP-1句を明にまたは暗に指定した基本項目を、「単精度2進データ項目」という。単精度2進データ項目の長さは、2バイトである。
- USAGE IS COMPUTATIONAL-2句またはUSAGE IS
COMP-2句を明にまたは暗に指定した基本項目を、「倍精度2進データ項目」という。倍精度2進データ項目の長さは、4バイトである。
- USAGE IS COMPUTATIONAL-3句またはUSAGE IS COMP-3句は、USAGE IS
PACKED-DECIMAL句と同義である。
(*1) SIT
COBOLは、文字位置の個数は文字数として扱う。文字の値がASCIIコードの範囲内においては、文字数=バイト数である。
5.5.12 VALUE句
データ項目に初期値を与える。または、条件名の値を指定する。
書き方1
データ項目に初期値を与える
VALUE IS 定数-1
書き方2
条件名の値を指定する
{ VALUE IS | VALUES ARE } { 定数-2 [ { THROUGH |
THRU } 定数-3 ]} …
構文規則
- THROUGHとTHRUは同義語である。
- 数字項目にVALUE句を指定する場合、または数字項目の条件変数の条件名にVALUE句を指定する場合、定数-1~定数-3は、数字定数でなければならない。このとき、数字定数の値は、数字項目のPICTURE句で示される値の範囲に入るものでなければならない。
- 符号付き数字項目、または符号付き数字項目を条件変数とする条件名にVALUE句を指定する場合、定数-1~定数-3は、符号付き数字定数でなければならない。
- 定数-1~定数-3に文字定数、日本語定数を指定する場合、その値はPICTURE句に指定した大きさを超えてはならない。(*1)
- PICTURE句の文字列に“P”を指定したデータ項目のVALUE句に指定できる値の例を、下表に示す。
PICTURE句の文字列
|
VALUE句に指定できる値
|
999PP
|
0, 100, 200, …, 99900
|
PP999
|
0, .00001, .00002, …, .00999
|
- 以下のデータ記述項に、VALUE句を書くことはできない。ただし、以下のデータ記述項に関係付けた条件名記述項には、VALUE句を書くことができる。
- EXTERNAL句を書いたデータ記述項、またはそのデータ記述項に従属するデータ記述項
- REDEFINES句を書いたデータ記述項、またはそのデータ記述項に従属するデータ記述項
(*1) SIT
COBOLは、PICTURE句に指定した大きさを超えても良い。超えた分は無視される。
一般規則
書き方1および書き方2に共通する規則
- VALUE句は、VALUE句を書いたデータ記述項およびこのデータ記述項を従属するデータ記述項に書いた他の句と矛盾するものであってはならない。
- 数字項目にVALUE句を指定する場合、VALUE句の定数は数字定数でなければならない。作業場所節または定数節の数字項目の場合、VALUE句の定数は、標準の桁よせの規則に従って格納される。
- 英字項目、英数字項目、英数字編集項目、数字編集項目または集団項目にVALUE句を指定する場合、VALUE句の定数は文字定数でなければならない。
- 日本語項目または日本語編集項目にVALUE句を指定する場合、VALUE句の定数は日本語定数でなければならない。(*1)
- 英数字編集項目または数字編集項目にVALUE句を指定する場合、VALUE句の定数は、編集の済んだ形式で指定しなければならない。(*1)
- VALUE句を指定したデータ項目にBLANK WHEN
ZERO句またはJUSTIFIED句を指定しても、それらの句の機能は無視される。
(1) SIT
COBOLでは、英数字定数、数字定数を指定できる。半角の英数字は、全角の英数字が設定されたとみなす。
(2)
SIT COBOLでは、編集前のイメージでもよい。
書き方1の規則
- VALUE句をどのデータ項目に指定できるかは、データ項目を定義する節によって、以下のように異なる。
- ファイル節の場合、条件名記述項の中にだけVALUE句を書くことができる。ファイル節のデータ項目の初期値は、規定されない。
- 連絡節の場合、条件名記述項の中にだけVALUE句を書くことができる。
- 作業場所節の場合、条件名記述項とデータ記述項にVALUE句を書くことができる。作業場所節のデータ記述項のVALUE句は、そのプログラムが初期状態に置かれたときにだけ効果がある。VALUE句を指定したデータ項目は、VALUE句に指定した定数の値によって初期化される。VALUE句を省略したデータ項目の初期値は、規定されない。
- 集団項目にVALUE句を指定する場合、VALUE句の定数は、表意定数または文字定数でなければならない。集団項目の領域には、それに従属する個々の基本項目や集団項目に関係なく初期値が格納される。
- VALUE句を指定した集団項目に従属する個々のデータ項目に、VALUE句を指定することはできない。
- JUSTIFIED句、SYNCHRONIZED句、またはUSAGE IS
DISPLAY以外のUSAGE句を指定したデータ項目を従属する集団項目には、VALUE句を指定することはできない。
- 可変反復データ項目、可変反復データ項目を従属する集団項目、または可変反復データ項目に従属するデータ項目にVALUE句を指定した場合、可変反復データ項目の大きさが、可変反復データ項目の最大の大きさ(OCCURS句のTO
整数-2
TIMESの整数-2の値)であるとみなされて、初期値が格納される。このとき、可変反復データ項目のDEPENDING
ON指定に指定したデータ項目にVALUE句を指定していても、その値は可変反復データ項目の初期化には影響を与えない。
- OCCURS句を指定したデータ項目、またはそのデータ項目に従属するデータ項目にVALUE句を指定した場合、VALUE句に指定した値が、関連するデータ項目の各繰り返しに格納される。
書き方2の規則
- 書き方2のVALUE句は、条件名記述項にだけ書くことができる。
- 条件名記述項には、条件名および書き方2のVALUE句を書かなければならない。条件名の性質は、条件変数によって決まる。
- THRU指定を書く場合、定数-2は定数-3より小さくなければならない。