Index
DATA DIVISION データ部

【用途】
3番目に記述する部。プログラム内で利用するデータに関する全ての情報を記載する。


データ部


概説

データ部(data division)では,実行用プログラムが入力として受け取り,操作し,作り出し又は出力として書き出すデータについて記述する.


データ記述の物理的論理的構成


データ部の構成

データ部は,節に細分される.節(section)は,ファイル節,作業場所節及び連絡節とする.

ファイル節(file section)では,データファイルの構造を定義する.各ファイルは,一つのファイル記述項とそれに続く一つ以上のレコード記述項によって定義する.レコード記述項は,ファイル記述項の直後に書く.

作業場所節(working-storage section)では,外部データファイルに属さず,内部的に処理され展開されるレコード及び従属するデータ項目,並びに値が原始プログラムで与えられ,実行用プログラムの実行中に変ることのないデータ項目について記述する.

連絡節(linkage section)は,呼ばれるプログラム中に書かれ,呼ぶプログラムと呼ばれるプログラムで参照されるデータ項目について記述する.連絡節の構造は,作業場所節と同じにする.


データ部の構造

データ部の節の一般形式と原始プログラム中に書く順序は,次のとおりとする.


一般形式

【書き方】


Index




FILE SECTION ファイル節

【用途】
環境部で定義したファイルに対し、データ部にてファイルのブロック長やレコード長、レコードの詳細を記述する節です。ファイルを利用する場合には必須。FD句とレコード定義にわけて各々のファイルに対し記述をおこないます。

ファイル節

ファイル節は,原始プログラムのデータ部にある.ファイル節(file section)では,データファイルの構造を定義する.各ファイルは,一つのファイル記述項とそれに続く一つ以上のレコード記述項によって定義する.レコード記述項は,ファイル記述項の直後に書く.

順ファイル機能でのファイル節の一般形式を以下に示す.


【書き方】


Index




FD  ファイル記述

【用途】
通称FD句と呼ばれ、ファイルの記述をおこなう。環境部のINPUT-OUTPUT SECTIONに記述したSELECT句のファイルに対して必ず対応するFD句を記述しなければならない。

ファイル記述項

COBOLプログラムでは,ファイル記述項がファイル節の中の最高レベルを表す.ファイル節の見出しに続けてファイル記述項を書く.ファイル記述項は,レベル指示語FD,ファイル名及び幾つかの独立な句の並びで構成し,レコードやブロックの大きさ,ラベルレコードの有無,ラベル項目の値,ファイルを構成するレコードの名前及び論理的な印字ページの行数を指定する.ファイル記述項自体は,分離符の終止符でとめる.


レコード記述の構造

レコード記述(record description)は,レコードの性質を記述する一群のデータ記述項で構成する.

データ記述項は,レベル番号とそれに続くデータ名又はFILLER句及び幾つかの必要な独立した句の並びで構成する.レコード記述は,階層構造を有する.ある項に書く句は,それに従属する項があるかないかによって異なる.


初期値

ファイル節のデータ項目の初期値は,不定である.


機能

ファイル記述項は,ファイルの物理的な構造,識別及び順ファイルに関連するレコード名の情報を与える.


一般形式

【書き方】



構文規則

(1)

ファイル記述項の最初にレベル指示語FDを書き,その後にファイル名-1を書かなければならない.

(2)

ファイル名-1の後に書く句の順序は任意とする.

(3)

ファイル記述項の後に,少なくとも一つのレコード記述項を書かなければならない.


一般規則

(1)

ファイル記述項は,ファイル名-1をファイル結合子に関連付ける.

(2)

BLOCK CONTAINS(ブロックの大きさ)句,LABEL RECORDS(ラベルレコード)句,LINAGE(行数)句については,以下で規定する.


Index




BLOCK CONTAINS ブロック長指定句

【用途】
この句は、ファイルのブロッキングファクタ(ブロック長)の大きさを指定します。この記述は基本的に必須です。省略すると「1」が指定されたものとみなします。

BLOCK CONTAINS句


機能

BLOCK CONTAINS(ブロックの大きさ)句は,ブロックの大きさを指定する.


一般形式

【書き方】


一般規則

(1)

この句は,次の条件が一つ以上満足される場合を除き,書かなければならない.
(a)

ブロックが,ただ一つの完全なレコードからなるとき.

(b)

ファイルを割り当てたハードウェア装置のブロックの大きさが,ただ一つに決まっているとき.

(c)

ブロック化の概念がない以下のファイルを指定するとき.

RDM順ファイル

通信ファイル

(2)

ブロックの大きさは,語RECORDS(レコード)を使って指定してよい.ただし,以下の場合には,語RECORDSを使ってはならない.
(a)

大記憶ファイルにおいて,一つのレコードが二つ以上のブロックにまたがるとき.

(b)

ブロックがレコードに含まれないつめもの(padding)を含むとき.

(c)

ブロックの大きさが一定でないような方法で,レコードをまとめるとき.

(3)

CHARACTERS(文字)を書くときは,ブロックの大きさは,それに含まれる文字の種類に関係なく,ブロックの格納に必要な文字位置の個数で指定する.
CHARACTERS及びRECORDSのいずれも指定されていないときは,CHARACTERSが指定されたものとみなす.

(4)

CHARACTERS指定で整数-2だけを書くと,ブロックの決まった大きさを示す.整数-1と整数-2の両方を書くと,それぞれが,ブロックの最小の大きさと最大の大きさを表す.

(5)

CHARACTERS指定で整数-1と整数-2は,必要な制御バイト(コンパイラが自動的に挿入する行制御用の領域及び日本語出力のための制御コード)とレコード形式がV形式の場合ブロック記述語 (4バイト) の大きさを含んでいなければならない.

(6)

RECORDS(レコード)を書くときは,ブロックの大きさは,ブロックに含まれるレコードの個数で指定する.

(7)

RECORDS指定の場合,コンパイラは,ブロックの大きさを表に従って決定する.ここで,nはBLOCK CONTAINS句で指定する整数-2である.

表 ブロックの大きさ
レコード形式
        ブロック長     
固定長   
レコード長×n+4      
可変長   
(最大レコード長+4)×n+4 


備考.
数値4はレコード記述語及びブロック記述語の大きさを示す.

なお,ブロック記述語はクラスがDAの場合のみ存在する.

(8)

関連するファイル結合子が外部ファイル結合子ならば,そのファイル結合子に関連する実行単位中のすべてのBLOCK CONTAINS句は,整数-1及び整数-2に対して同じ値を持たなければならない.


Index




LABEL RECORDS ラベル指定句

【用途】
この句は、ラベルの有無を指定する句です。古いプログラムには必ず記述されています。ただし、今後は廃止になる句なので覚える必要はないでしょう。古いリストプログラムでは、LABEL RECORDS OMITTEDなんて登場します。一応参考程度に掲載。

LABEL RECORDS句


機能

LABEL RECORDS(ラベルレコード)句は,ラベルの有無を指定する.LABEL RECORDS句は,廃要素であり,今後この要素は削除される予定である.新たに作成するプログラムにおいてこの要素を使用すべきではない.


一般形式

【書き方】


一般規則

(1)

OMITTED(なし)は,ファイル又はその装置に,明にラベルが存在しないことを示す.

(2)

STANDARD(標準)は,ファイル又はその装置に,システム仕様に従う標準のラベルが存在することを示す.

(3)

このコンパイラでは,LABEL RECORDS句は,注釈として扱われる.


Index




LINAGE 行数句

【用途】
リストプログラム時に、1ページの行数を予め指定することができます。通常は記述しません。特殊な用紙(例えば伝票など)を出力する場合や、どうしても行数を変更する必要がある場合にはLINAGE句で指定をする必要があります。納品書や請求書などに、よく指定されています。

LINAGE句


機能

LINAGE(行数)句は,論理的な1ページを構成する行数を指定する.更に,論理ページの上端や下端の余白の大きさ,ページ本体中で脚書き領域が始まる行位置をも指定する.


一般形式

【書き方】


構文規則

(1)

データ名-1,データ名-2,データ名-3及びデータ名-4は,符号なし整数項目でなければならない.

(2)

データ名-1,データ名-2,データ名-3及びデータ名-4は,修飾してもよい.

(3)

整数-2は,整数-1以下でなければならない.

(4)

整数-3,整数-4は,ゼロであってもよい.


一般規則

(1)

LINAGE句を使って,論理的な1ページを構成する行数を指定する.論理ページの大きさは,FOOTING(脚書き)指定以外の各指定に記述した値の合計とする.LINES AT TOP(上端余白行)指定又はLINES AT BOTTOM(下端余白行)指定を書かないと,これらの項目に対する値はゼロとみなされる.FOOTING指定を書かないと,ページあふれ条件と独立にページ終了条件が生じることはない.論理ページの大きさと物理ページの大きさとの間に,関連がある必要はない.

(2)

整数-1又はデータ名-1のデータ項目の値は,論理ページに書いたり行送りしたりできる行数を指定する.この値は正でなければならない.論理ページのこの部分をページ本体(page body)という.

(3)

整数-2又はデータ名-2のデータ項目の値は,ページ本体中で脚書き領域(footing area)が始まる行位置を指定する.この値は正であり,かつ整数-1又はデータ名-1のデータ項目の値以下でなければならない.
論理ページ中で,整数-2又はデータ名-2のデータ項目の値が示す行から,整数-1又はデータ名-1のデータ項目の値が示す行までの間の領域を,両端の行を含めて,脚書き領域とする.

(4)

整数-3又はデータ名-3のデータ項目の値は,論理ページの上端部の余白の行数を指定する.この値はゼロであってもよい.

(5)

整数-4又はデータ名-4のデータ項目の値は,論理ページの下端部の余白の行数を指定する.
この値はゼロであってもよい.

 
(6)

整数-1,整数-3及び整数-4は,OPEN OUTPUT文の実行によってファイルを開く時点で,論理ページの各部分を構成する行数を定める.整数-2を書くと,その時点でこの値を使って脚書き領域が定められる.これらの値は,そのプログラムの実行中にそのファイルに書き出されるすべての論理ページに対して適用される.

(7)

データ名-1,データ名-3及びデータ名-4のデータ項目の値の規則は,次による.
(a)

OPEN OUTPUT文の実行によってファイルを開く時点で,これらのデータ項目の値を使って,最初の論理ページの各部分を構成する行数が定められる.

(b)

ADVANCING PAGEのあるWRITE文を実行する時点,又はページあふれ条件になる時点で,これらのデータ項目の値を使って,次の論理ページの各部分を構成する行数が定められる.
ただし,このコンパイラではOPEN文実行時に定められた論理ページの行数が,CLOSE文を実行するまで使用される.

(8)

データ名-2を書くと,OPEN OUTPUT文の実行によってファイルを開く時点で,データ名-2のデータ項目の値を使って,最初の論理ページの脚書き領域が定められる.ADVANCING PAGEのあるWRITE文を実行する時点,又はページあふれ条件になる時点で,このデータ項目の値を使って,次の論理ページの脚書き領域が定められる.

(9)

LINAGE句を書くと,LINAGE-COUNTER(行数カウンタ)が自動的に作り出される.行数カウンタは,いかなる時点においても,現在のページ本体中の行位置を指す.行数カウンタの規則は,次による.
(a)

ファイル節(file section)でLINAGE句を指定したファイル記述項のファイルごとに,一つの行数カウンタが作り出される.

(b)

手続き部の文でだけ行数カウンタを参照できるが,行数カウンタの値を変更できるのは入出力管理システムだけである.プログラム中に複数個の行数カウンタがあるときは,行数カウンタをファイル名で修飾しなければならない.

(c)

行数カウンタの値は,関連するファイルに対するWRITE文の実行中に,次の規則に従って自動的に変更される.
(i)

ADVANCING PAGEのあるWRITE文を実行すると,行数カウンタの値は自動的に1に戻される.1に戻されるとき,行数カウンタの値は,一時的に,暗に整数-1又はデータ名-1のデータ項目の値を超えるように増加される.

(ii)

ADVANCING整数-1又は一意名-2のあるWRITE文を実行すると,行数カウンタの値は,整数-1又は一意名-2のデータ項目の値だけ増加する.

(iii)

ADVANCINGのないWRITE文を実行すると,行数カウンタの値は1だけ増加する.

(iv)

次の論理ページの最初の行位置に来たときは,行数カウンタの値は自動的に1に戻される.

(d)

関連するファイルに対してOPEN OUTPUT文を実行すると,行数カウンタの値は自動的に1に戻される.

(10)

論理ページは,すきまなく次のページに連続しているものとする.

(11)

このファイル記述項に関連するファイル結合子が外部ファイル結合子のとき,実行単位中でこのファイル結合子に関連するすべてのファイル記述項は,次の規則に従わなければならない.
(a)

いずれかのファイル記述項にLINAGE句を書くときは,すべてにLINAGE句を書く.

(b)

整数-1,整数-2,整数-3及び整数-4を書くときは,対応する各整数にすべて同じものを書く.

(c)

データ名-1,データ名-2,データ名-3及びデータ名-4は外部データ項目であり,さらに,各対応するデータ名にすべて同じものを書く.

(12)

印字ファイルに対してLINAGE句が省略された場合,物理ページの行数は,66として扱う.


Index



WORKING-STORAGE SECTION 作業場所節

【用途】
プログラム内で使用する作業用項目の定義場所です。


作業場所節

作業場所節(working-storage section)は,原始プログラムのデータ部中に位置する.作業場所節には,データファイルの一部でないレコード及び従属するデータ項目を記述する.

作業場所節は,節の見出しとそれに続くレコード記述項や独立データ項目のデータ記述項によって構成する.

作業場所節の一般形式は,次による.

【書き方】


独立作業場所

互いに階層関係をもたない作業場所の項目で,それ以上分割する必要のないものは,レコードにまとめなくてもよい.その場合には,独立した基本項目として,分けて定義する.これらの各項目は,特別なレベル番号77で始まる別々のデータ記述項で定義する.

各データ記述項には,次のデータ句を書かなければならない.
(1)

レベル番号77

(2)

データ名

(3)

PICTURE句又はUSAGE IS INDEX句

これ以外のデータ記述句は,書かなくてもよいが,必要ならば項目を完全に指定するために書く.


作業場所レコード

互いに決まった階層関係をもつ作業場所の要素は,レコード記述の書き方の規則に従ってレコードにまとめなければならない.他のデータ項目と階層関係をもたない作業場所節中のデータ要素は,一つの基本項目であるレコードとして記述できる.ファイル節(file section)のレコード記述に用いられる句は,すべて作業場所節のレコード記述に使用できる.


レコード記述の構造

レコード記述は,固有のレコードの特性を記述する一連のデータ記述項から成る.各データ記述項は,レベル番号と必要ならばそれに続くデータ名又はFILLER句の指定,及び必要な一連の独立した句から成る.レコード記述項は,階層構造をとることができる.したがって,記述項中で用いる句は,従属する記述項の有無に依存して大きく変る.


初期値

指標データ項目以外の作業場所節の各データ項目に初期値を与えるときには,VALUE(値)句を用いる.指標データ項目又はVALUE句が書かれていない項目の初期値は,規定しない.


Index




LINKAGE SECTION 連絡節

【用途】
外部から情報を受け取り、その情報を利用する場合に記述します。一番利用されるのはサブルーチンでしょう。サブルーチンとは、ある特定の処理をパッケージ化して、各プログラム内で共通利用できるプログラムのことです。また、JCLから情報を受け取る場合にもこの節の記述が必要になります。実務では利用頻度が高いです。

連絡節

連絡節は,原始プログラムのデータ部に置かれる.連絡節は,呼ばれるプログラムに置かれ,呼ぶプログラム及び呼ばれるプログラムによって,参照されるデータ項目を記述する.

連絡節は,実行用プログラムがCALL文のもとで動き,呼ぶプログラムのCALL文がUSING指定をもつときだけ意味をもつ.

連絡節は,呼ぶプログラムを通して利用可能であり,かつ呼ぶプログラムと呼ばれるプログラムの両方で参照されるデータを記述するのに使用する.呼ばれるプログラムの連絡節で記述されるデータ項目と呼ぶプログラムで記述されるデータ項目の間の対応をとる機能は,本書の他の所で記述される.指標名の場合には,そのような対応はとられず,呼ばれるプログラム及び呼ぶプログラム中の指標を参照する.

連絡節の構造は,先に作業場所節に対して記述されたものと同じであり,節の見出しで始まり,独立データ記述項やレコード記述項が続く.

【書き方】

連絡節のデータ項目が,呼ばれるプログラムでないプログラムでアクセスされるならば,その結果は規定しない.


独立連絡場所

互いに階層関係をもたない連絡節の項目は,レコードにまとめる必要はなく,独立した基本項目として定義する.これらの各データ項目は,それぞれ特別なレベル番号77で始まり別々のデータ記述項で定義する.

各データ記述項には,次のデータ句を書かなければならない.
(a)

レベル番号77

(b)

データ名

(c)

PICTURE句又はUSAGE IS INDEX句

これ以外のデータ記述句は,書かなくてもよいが,必要ならば項目を完全に指定するために書く.


連絡レコード

互いに決まった階層関係を持つ連絡節のデータは,レコード記述の書き方の規則に従ってレコードにまとめなければならない.他のデータ項目と階層関係をもたない連絡節のデータは,一つの基本項目であるレコードとして記述してもよい.


初期値

連絡節の中では,条件名記述項(レベル番号88)以外でVALUE句を指定してはならない.


Index