ファイル管理記述項

機能

ファイル管理記述項では、ファイルに名前を付けるとともに、ファイルに関するその他の情報を指定する。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、ASSIGN句中のRECORD DELIMITER指定とRESERVE指定と反復記号は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内では、これらの指定および記号を使用するべきではない。.

一般形式

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

形式 2 (行順ファイル)

形式 3 (相対ファイル)

形式 4 (索引ファイル)

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

指令

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

    • ASSIGN - 定数、データ名、 または外部ファイル参照を評価する方法を決定する。

    • SEQUENTIAL - ORGANIZATION IS SEQUENTIALとして定義されているファイルがLINE SEQUENTIALまたはRECORD SEQUENTIALのどちらであるかを判定する。

構文規則

すべての形式 (すべてのファイル)
  1. ファイル管理記述項の冒頭には、SELECT句を指定する。SELECT句の後ろに続く他の句は、どんな順序で書いてもよい。

  2. データ部に記述する各ファイルには、ファイル管理段落において一度だけファイル名を付ける。ファイル管理記述項に指定した各ファイルに対応して、同じファクトリ、メソッド、オブジェクト、またはプログラムのデータ部のファイル記述項を書かなければならない。

  3. ACCESS MODE句を指定しないと、暗黙的にACCESS MODE IS SEQUENTIALを指定したものとみなされる。

  4. データ名-1は、データ部の中で英数字データ項目または集団項目として宣言できる。この場合、そのファイルの外部名を保持できるだけの十分な長さをとる必要がある。 データ名-1を原始要素の中で明示的に宣言しないと、COBOLシステムが暗黙的に英数字データ項目として宣言する。その長さは、ファイル名の長さとして許される最大の長さがとられる。FROM指定の中にデータ名-1を書く場合は、データ部の中で明示的に宣言しておかなければならない。

  5. NOT OPTIONAL指定は、入出力両用モードでファイルを開く場合にだけ効力をもつ。

  6. 外部ファイル参照、データ名-1、定数-1はファイルの外部名を指定する。 EXTERNAL指定またはDYNAMIC指定を書く場合、定数-1を指定してはならないDYNAMIC指定を書く場合、外部ファイル名に指定した語は外部ファイル参照として解釈される。

  7. データ名-2は、データ部の中で、2文字の英数字データ項目

    または用途が表示用の2文字の数字データ項目

    として定義しておく。データ部のファイル節または

    局所記憶節

    内では定義できない。

  8. データ名-3は、作業場所節または連絡節の中で6バイトの集団項目として定義しておく。

  9. データ名-4は、作業場所節の中で英数字データ項目として定義しておく。

  10. すべてのデータ名は、修飾できる。
形式 1 (レコード順ファイルのみ)
  1. 定数-2は、1文字の文字定数とする。

  2. データ名-5は修飾してもよい。これはデータ部の中で、1文字の英数字データ項目として定義しておく。通信節または ファイル節または報告書節の中では定義できない。

  3. 文字列は、予約語または利用者名または定数であってはならない。
形式 1 および 2 (レコード順ファイルおよび行順ファイル)
  1. ORGANIZATION句を指定しないと、順編成であるものと想定される。

  2. KEYBOARDは、操作卓入力を意味する。

  3. DISPLAYは、操作卓出力を意味する。

  4. PRINTERはシステムの主たる印刷装置を指す。

  5. PRINTER-1はシステムの2番目の印刷装置を指す。
形式 3 (相対ファイル)
  1. START文の作用対象に相対ファイルを指定する場合は、そのファイルに関するRELATIVE KEYを指定しておく。

  2. データ名-5は、該当するファイル名のレコード記述項の中では指定できない。

  3. データ名-5は、符号なしの整数データ項目として定義する。
形式 4 (索引ファイル)
  1. 分割キー名は、該当するファイル名のレコード内のいくつかのデータ項目をつなげたものである。これはSTART文またはREAD文の中でだけ使用できる。

  2. データ名-5とデータ名-8のデータ項目

    および分割キー名-1と分割キー名-2によって参照されるデータ名

    は、該当するファイルのレコード記述項の中で定義しておく。

    これらのデータ項目は、どの項類のデータとして定義してもよい。しかし、SELECT句内で指定したファイル > に対する入出力文に関しては、キーは必ず英数字項目として扱われる。

  3. データ名-5とデータ名-8のデータ項目

    および分割キー名-1と分割キー名-2によって参照されるデータ名

    に可変長項目を指定することはできない。詳細はデータ部 - ファイルおよびデータ記述章のOCCURS(反復)句節を参照。

  4. データ名-8は、 左端の文字位置がデータ名-5により参照される項目、または同じファイルについて指定された他のデータ名-8により参照される項目の、左端の文字位置に対応する項目を参照してはならない。

  5. 索引ファイルが変数長レコードを含む場合は、データ名-5 およびデータ名-8、

    および分離キー名-1 および分離キー名-2が参照するデータ名すべて

    は、そのレコードの最初のxバイトに含まれる。このxは、ファイルに指定された最小レコードサイズの値である。データ部 - ファイルおよびデータ記述 の章のRECORD(レコードの大きさ)句節を参照。

  6. PASSWORD句を指定する場合、対応するRECORDKEY句またはALTERNATE RECORD KEY句の直後に書く。
形式 5 (整列併合ファイル)
  1. データ部に記述する各整列ファイルまたは併合ファイルには、ファイル管理段落で一度だけファイル名を付ける。ファイル管理記述項に記述した各整列ファイルまたは併合ファイルに関して、整列併合ファイル記述項を記述する。

  2. ファイル名は整列ファイルまたは併合ファイルを表わすため、ファイル管理段落中のファイル名の後ろにはASSIGN句だけを記述することができる。

一般規則

すべての形式 (すべてのファイル)
  1. ASSIGN句は、ファイル名-1が表わすファイルを記憶媒体に対応付ける。最初に記述したファイル割当てだけが効力をもつ。

    1つのASSIGN句内にファイル割当てをいくつか記述した場合、最初のもの以外は注記になる。

  2. RESERVE句を使用すると、利用者は必要な入出力領域の数を指定できる。

    使用しているオペレーティングシステムに付随するマニュアルに別途指定されていないかぎり、RESERVE句は注記になる。

  3. ORGANIZATION句は、ファイルの論理構造を指定する。ファイル編成はファイルが作成されるときに確立され、後から変更することはできない。

  4. FILE STATUS句を指定すると、明示的または暗黙的に該当ファイルを対象とする文が実行されるたびに、ランタイムシステムからデータ名-2のデータ項目に値が返される。この値はその文を実行した結果の状態を示している。(手続き部の章の入出力状態節を参照。)

    データ名-3は、指定しても注記になる。

  5. PASSWORD句は注記になる。

  6. ASSIGN句内の予約語DYNAMICは、定数-1またはデータ名-1の値が外部ファイル記憶環境におけるファイル名であることを示す。

  7. ASSIGN句内の予約語EXTERNALは、指定したファイルが外部環境においては外部ファイル参照によって識別されることを示す。それを通じて、指定したファイルがさらに外部ファイル記憶環境名に対応付けられることもある。(ある操作環境での外部ファイル名の設定については、ファイル処理に関するCOBOLのマニュアルを参照。)

    外部ファイル参照中に文字"-" が含まれていると、最後の"-" の後ろに続く部分の名前だけが、外部環境においてファイルを識別するために使用される。

  8. 外部ファイル参照かデータ名-1か定数-1を指定せずにDISKを指定するか、FROMを指定せずにDISKを指定するかすると、そのファイルはディスク・ファイルでその名前はファイル記述中のVALUE OF FILE-ID に指定されることを表わす。このファイル記述中にVALUE OF FILE-ID句が含まれていない場合は、そのディスク・ファイルの名前は、ファイル名-1 (「内部ファイル名」) と同じであると想定される。

  9. 必要語DISK, KEYBOARD, DISPLAY, PRINTER, PRINTER-1のどれかの後ろに外部ファイル参照かデータ名-1か定数-1が続く場合、その必要語は無視される。

  10. DISK FROMを指定すると、そのファイルはディスク・ファイルでありディスク上のファイル名はデータ名-1の値であることを表わす。しかし、そのファイルに対してOPEN文を実行すると、データ名-1はすべて空白とされて、そのディスク・ファイルの名前はファイル名-1(「内部ファイル名」)と同じであると想定される。

  11. OPTIONAL指定は、入力モードか入出力両用モードか拡張モードで開くファイルに対してだけ適用できる。ランタイム要素を実際に実行するときに存在するとは限らないファイルに対して、これを指定する必要がある。

  12. SHARING句では、ファイルに適用する共有モードを指定する。ただし、この句はOPEN文のSHARING句によって上書きされることがある。この句ではまた、レコード・ロックが有効であるか否かを指定する。詳しくは、翻訳集団の概念の章の共有モード 節で指定する。
形式 1、3 および 4 (レコード順ファイル、相対ファイル、および索引ファイル)
  1. LOCK MODE句は該当するファイルに適用するロック方式を指定するものであり、書いても書かなくてもよい。

    この句を省略した場合、ファイルを開くと、そのファイルは排他モードにおかれる。ただし、入力モードで開いた場合を除く。

    LOCK MODE IS EXCLUSIVEを指定すると、ファイルを開いた実行単位はそのファイル全体の鍵を取得する。

    LOCK MODE IS AUTOMATICまたはLOCK MODE IS MANUALを指定すると、開いたファイルは実行単位の間で共有される。ただし、出力モードで開いたファイルおよび拡張モードで開いた索引ファイルと相対ファイルは、常に排他モードにおかれる。

  2. ROLLBACK句を指定すると、更新取消し機能を備えたCOBOLシステムではトランザクションのロギングが行われる。システムでの実現方法については、ファイル処理に関するCOBOLのマニュアルを参照。

    ROLLBACK句を指定すると、WITH LOCK ON MULTIPLE RECORDSが自動的に発効される。

  3. WITH LOCK ON RECORD句は、ファイル中の1レコードだけをロックすることを指定する。

    WITH LOCK ON MULTIPLE RECORDS句は、ファイル中の複数のレコードをロックすることを指定する。複数のレコードをロックする必要があるときは、この句を指定しなければならない。

  4. LOCK MODE IS AUTOMATIC WITH LOCK ON RECORDを指定すると、該当するファイルを対象にしたREAD文を実行したときに、該当する1レコードがロックされる。その後でそのファイルに入出力操作を行うと、そのレコードはロックを解除される。ただし、START文は例外である。

    LOCK MODE IS AUTOMATIC WITH LOCK ON MULTIPLE RECORDを指定すると、該当するファイルを対象にしたREAD文を実行したときに、該当する1レコードがロックされる。いったんロックされたレコードは、CLOSE, COMMIT, ROLLBACK, UNLOCKのどれかの文を実行するまで、または個々のロックがDELETE文で削除されるまで解除されない。

  5. LOCK MODE IS MANUAL WITH LOCK ON RECORDを指定すると、該当するファイルを対象にしたWITH LOCK指定を伴うREAD文を実行したときにだけ、該当する1レコードがロックされる。その後で、そのファイルに入出力操作を行うと、そのレコードはロックを解除される。ただし、START文は例外である。

    LOCK MODE IS MANUAL WITH LOCK ON MULTIPLE RECORDSを指定すると、該当するファイルを対象にしたREAD WITH KEPT LOCK文を実行したときに、該当する1レコードがロックされる。いったんロックされたレコードは、CLOSE, COMMIT, ROLLBACK, UNLOCKのいずれかの文を実行するまで解除されない。

  6. ロックモードにMANUALまたはAUTOMATICを指定しWITH LOCK ON MULTIPLE RECORDSを指定しないと、単一レコードをロックするものと想定される。

  7. EXTERNALと定義したファイルに対して、ASSIGN指令または必要語を用いてSELECT/ASSIGN文中でデータ名-1をファイル名に割り当てるか、あるいはファイル記述項のVALUE OF句の形式 2 を用いてファイル名を割り当てる場合、下記の規則に従う。

    1. そのファイルを参照するすべての原始要素プログラム中に物理ファイル名を含めるには、同じ名前の一意名を使用する。

    2. 物理ファイル名を保持する一意名の定義にも、EXTERNAL属性を含める。

    この規則に反していても、コンパイル時にはそのことは検出されない。しかし、実行単位中のランタイム要素 が実行時にこの規則から外れると、結果は保証されない。

    レコード・ロックについての詳細は、ファイル処理に関するCOBOLのマニュアルを参照。

形式 1 (レコード順ファイル)
  1. CLOSE REEL文またはCLOSE UNIT文を用いてファイルを閉じることができるかまたはそうする意図がある場合、MULTIPLE REEL指定またはMULTIPLE UNIT指定を書く。

  2. ファイル中のレコードは、先行・後行レコード関係によって規定される順序で呼び出される。この関係はファイルを作成または拡張したときに、WRITE文の実行によって確立されたものである。

  3. LINE ADVANCING FILEを指定すると、印刷装置に適したファイルが作成される。このファイルの冒頭には、復帰文字が置かれる。各レコードを書き出す際の改行指定には、省略時解釈としてAFTER ADVANCING 1 LINEが設定される。形式についての詳細は、ファイル処理に関するCOBOLのマニュアルを参照。

  4. PADDING CHARACTER句は注記になる。

    関連するファイル結合子(file connector)が外部ファイル結合子である場合、そのファイル結合子に関連する実行単位中のPADDING CHARACTER句の指定内容は、すべて同じにする。データ名-5が外部のものである場合、外部データ項目を参照する。

    RECORD DELIMITER句は注記になる。

形式 2 (行順ファイル)
  1. 明示的にまたは暗黙的にLINE SEQUENTIAL ORGANIZATION を指定すると、ファイルは固定長のレコードから構成され、その各レコードに1行分のデータが記録されるものとされる。このレコードが格納される際には、後行の空白は削除される。1行の定義はオペレーティングシステムによって異なる。復帰および改行のどちらか一方または両方によって1行の末尾を区切るものもあれば、固定長のレコードとして余白に充てん文字を詰めるものもある。どちらにしても、使用しているCOBOLシステムは、そのオペレーティングシステムのエディタ・ソフトウェアと互換性のあるファイルを必ず作成する。

  2. LOCK MODE IS句は注記になる。

形式 3 (相対ファイル)
  1. 呼出し法が順呼出しのとき、ファイル中のレコードは現存するレコードの相対レコード番号の昇順に呼び出される。

  2. 呼出し法が乱呼出しのとき、RELATIVE KEYデータ項目の値が呼び出されるレコードを示す。

  3. 相対ファイル中に格納されているすべてのレコードは、相対レコード番号によって一意に識別される。この相対レコード番号は、ファイル中のレコードの論理的な順序も示す。つまり、最初の論理レコードの相対レコード番号は1であり、以降2、3、4、...というように続く。

  4. データ名-5のデータ項目は、利用者とオペレーティングシステムとの間で相対レコード番号を情報を取り交わすために使用される。

形式 4 (索引ファイル)
  1. 呼出し法が順呼出しのとき、ファイル中のレコードは、指定されたレコードキーの値の昇順に呼び出される。

  2. 呼出し法が乱呼出しのとき、レコードキー・データ項目の値が呼び出されるレコードを示す。

  3. RECORD KEY句は、該当するファイルの主レコードキーを指定する。ファイル中のレコードの間で、主レコードキーの値は一意にする。主レコードキーは、索引ファイルからレコードを呼び出す経路を形成する。

  4. ファイルが1つ以上のレコード記述項をもつ場合、データ名-5

    および分割キー名-1 に参照されるどのデータ名

    、これらのレコード記述項の1つにだけ記述されている必要がある。どれかのレコード記述項にあるデータ名-5

    および分割キー名-1 に参照されるデータ名のどれか

    によって参照される同一の文字位置は、そのファイルにある他のすべてのレコード記述項のキーとして、暗黙的に参照される。

  5. 関連するファイル結合子が拡張ファイル結合子である場合、そのファイル結合子に対応する実行単位中のすべてのファイル記述項は、対応するレコード中で、同じ相対的な位置にあるデータ名-1に対して、同じデータ記述項を記述する。

  6. ALTERNATE RECORD KEY句は、該当するファイルの副レコードキーを指定する。副レコードキーは、索引ファイルからレコードを呼び出す代替経路を形成する。

  7. データ名-5

    または分割キー名-1

    およびデータ名-8

    または分割キー名-2

    のデータ記述ならびにレコード内でのそれらの相対位置は、ファイルが作成されたときと同じにする。また、副レコードキーの数も、ファイルが作成されたときと同じにする。このチェックは環境によっては構成可能である。("ファイル処理のためのプログラマガイド"の"呼出し可能ファイルハンドラ"に記述されている、呼出し可能ファイルハンドラ構成ファイル中のKEYCHECK属性を参照。)

  8. DUPLICATESを指定すると、ファイル中の該当するレコードキーの値がレコード間で重複してもよいことを意味する。DUPLICATESを指定しない場合、該当するレコードキーの値は、ファイル中のすべてのレコードにわたって一意にする。

  9. 重複する値をもつレコードを探し出すには、同じ値をもつ最初のレコードから順呼出しで読み込んでいく。

  10. SUPPRESS句では、副指標(alternate index)にスパースキー(sparse key)を使用することを要求する。スパースキーは呼出し可能ファイル・ハンドラ(Callable File Handler)を通じてのみ利用可能であり、すべてのシステムで利用できるとはかぎらない(ファイル・ハンドラの詳細については、COBOLシステムのマニュアルを参照)。

  11. 分割キー名-1は、データ名-6および、発生するデータ名-7すべての、指定された順での連結から成るレコードキーを定義する。分割キー名-2は、データ名-9および、発生するデータ名-10すべての、指定された順での連結から成るレコードキーを定義する。
形式 5 (整列併合ファイル)
  1. ファイル管理記述項において、整列ファイルまたは併合ファイルに名前を付け、それと記憶媒体との関係を指定する。

  2. SORT STATUS句を指定すると、各整列処理の実行が終わった時点で、データ名-2によって指定される2文字のデータ項目に値が設定される。この値は整列処理の終了結果を示す。以下の状態キーの組み合わせが可能である。状態キー1=0で状態キー2=0であれば、正常終了を表わす。状態キー1=3で状態キー2=0であれば、パラメータ誤りを表わす。状態キー1=9であれば、状態キー2にオペレーティングシステムのエラーメッセージ番号が入れられている。状態キー 1 および 2、および状態の定義について詳しくは、手続き部の章の入出力状態節を参照。SORT STATUS句の代わりにFILE STATUS句を使用できる。しかし、整列ファイルまたは併合ファイルに指定したFILE STATUS句は、SORT STATUSの同義語として扱われる。

  3. ASSIGN句は注記となる。