OPEN(開く)文は、ファイルの処理を行うための準備(ファイルのオープン)をする。また、見出しの確認や書き込み、その他の入出力操作を行う。
OPEN文のREVERSED指定は、ANSI '85標準では廃要素に分類されており、ANSI標準の次回の全面改訂の際に、削除される予定である。
この構文は、Micro Focus COBOLに組み込まれているすべての方言で全面的に使用できる。FLAGSTD指令を使用すると、この構文が使われているすべての箇所を見つけ出すことができる。
標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、OPEN文のREVERSED指定は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの文を使用するべきではない。
OPEN文は、桁詰めデータ項目用のシステム資源を割り当て、このデータ項目を初期化する。
一般形式
形式 1(レコード順編成ファイル)
形式 2 (行順編成ファイル、相対ファイル、索引ファイル)
SHARING句の部分は以下のとおりとする。
形式 3(桁詰めデータ項目)
構文規則
すべての形式(すべてのファイル)
- OPEN文が対象とするファイルは、編成または呼び出し法が同じである必要はない。
-
SHARING ALLを指定してINPUT指定を書かない場合、ファイル名-1のファイル管理記述項にLOCK MODE句を指定しなければならない。
形式 1(レコード順編成ファイル)
-
NO REWINDは注記となる。
-
I-O指定はディスク ファイルに対してだけ適用できる。
- EXTEND指定は、LINAGE句を指定していないファイルに対してだけ適用できる。
- 複数ファイル リールに対しては、EXTENDを指定できない。
形式 2(
行順編成ファイル、
相対ファイル、索引ファイル)
-
順呼び出し法のファイルに対して、EXTENDを指定できる。
-
行順編成のファイルにはSHARING指定を書いてはならない。
形式 3(桁詰めデータ項目)
-
一意名-1は、イベントポインター、モニターポインター、ミューテックスポインター、またはセマフォポインターのいずれかのデータ項目のUSAGEを使用して、基本データ項目を参照しなければならない。
一般規則
形式 1 および 2(すべてのファイル)
- OPEN文が正常に実行され終わるまで、該当するファイルを明示的または暗黙的に対象とするどのような文も実行することはできない(USINGまたはGIVINGを指定したSORT文およびMERGE文は例外である)。
-
OPEN文が正常に実行されると、ファイルの利用可能性が判定され、ファイル名によって参照されるファイル結合子がOPEN文のモードの状態に置かれる。そして、ファイル結合子を通じて、ファイルがファイル名と関係づけられる。
必要語のINPUT, OUTPUT, I-O, およびEXTENDを用いて、ファイル結合子を通じてファイルに適用する入出力操作を指定し、OPEN文のモードを確立する。(表14-4 文とOPENモードの許される組合せを参照。)
ファイルが物理的に存在し、ファイル処理システムに認識されていれば、そのファイルは利用可能である。表 14-2 (現在は開かれていない)利用可能なファイルと利用不可能なファイルを開く処理に現在は開かれていない利用可能なファイルと利用不可能なファイルを開いたときの結果を示す。表 14-3 現在は他のファイル結合子によって開かれている利用可能な共有ファイルを開く処理に現在は他のファイル結合子によって開かれている利用可能なファイルと利用不可能なファイルを開いたときの結果を示す。
>表 14-2: (現在は開かれていない)利用可能なファイルと利用不可能なファイルを開く処理
OPEN文のモード |
ファイルは利用可能 |
ファイルは利用不可能 |
INPUT |
正常に開ける |
開けない |
INPUT (不定ファイル) |
正常に開ける |
正常に開ける。最初に読んだときに、ファイル終了条件または無効キー条件が発生する。 |
I-O |
正常に開ける |
開けない |
I-O (不定ファイル) |
正常に開ける |
開くとファイルが作成される |
OUTPUT |
正常に開ける;中身は空 |
開くとファイルが作成される |
EXTEND |
正常に開ける |
開けない |
EXTEND (不定ファイル) |
正常に開ける |
開くとファイルが作成される |
>表 14-3:現在は他のファイル結合子によって開かれている利用可能な共有ファイルを開く処理
開く要求 |
共有の度合いとOPEN文のモード |
他と共有せず |
読出しのみ共有 |
他のすべてと共有 |
拡張 I-O 入力 出力 |
拡張 I-O 出力 |
入力 |
拡張 I-O 出力 |
入力 |
SHARING WITH NO OTHER |
EXTEND I-O INPUT OUTPUT |
開けない |
開けない |
開けない |
開けない |
開けない |
SHARING WITH READ ONLY |
EXTEND I-O |
開けない |
開けない |
開けない |
開けない |
正常に開ける |
INPUT |
開けない |
開けない |
正常に開ける |
開けない |
正常に開ける |
OUTPUT |
開けない |
開けない |
開けない |
開けない |
開けない |
SHARING WITH ALL OTHER |
EXTEND I-O |
開けない |
開けない |
開けない |
正常に開ける |
正常に開ける |
INPUT |
開けない |
正常に開ける |
正常に開ける |
正常に開ける |
正常に開ける |
OUTPUT |
開けない |
開けない |
開けない |
開けない |
開けない |
- OPEN文の実行が正常に終了すると、対象となったファイルのレコード領域が利用可能となる
。
- 表 14-4において、行と列の交差する格子内の"X"は、該当の行のアクセス モードでの入出力モードの指定を、列の上部に示されているOPEN文のモードに適用できることを示す。
>表 14-4:OPEN文モードの有効な組み合わせ
呼び出し法 |
OPEN文のモード |
文 |
INPUT |
OUTPUT |
INPUT-OUTPUT |
EXTEND |
順呼び出し |
READ |
X |
|
X |
|
WRITE |
|
X |
|
X |
REWRITE |
|
|
X |
|
乱呼び出し(非順編成ファイル) |
READ |
X |
|
X |
|
WRITE |
|
X |
X |
|
REWRITE |
|
|
X |
|
START |
|
|
|
|
DELETE |
|
|
X |
|
動的呼び出し(非順編成ファイル) |
READ |
X |
|
X |
|
WRITE |
|
X |
X |
|
REWRITE |
|
|
X |
|
START |
X |
|
X |
|
DELETE |
|
|
X |
|
注: START文とDELETE文は、レコード順編成ファイル
または行順編成ファイル
には適用できない。
-
WITH LOCKを指定すると、OPEN文は該当するファイル全体に対してロックする。(これは、そのファイルのSELECT文の中にLOCK MODE IS EXCLUSIVEを指定することに等しい。環境部の章のファイル管理記述項ファイル管理記述項節を参照)。
-
OPEN文の実行中にファイル属性の間に矛盾が検出されると、そのOPEN文の実行は不成功となる。OPEN文の実行中にどのファイル固有属性が妥当性を検査されるかは、COBOLシステムごとに定義されている。詳細については、ファイルの取扱いに関する説明書を参照。ファイルの編成や記憶媒体によって、どのファイル固有属性が妥当性を検査されるかは変わってくる
。
-
同じ実行単位の中で1つのファイルを開くのに、INPUT, OUTPUT, EXTEND, I-Oのどのモードでも指定できる。 ファイル結合子に関して最初にOPEN文を実行した後では、そのファイル結合子に関してCLOSE文を実行してからでないと、同じファイル結合子に関して再びOPEN文を実行することはできない。対象のファイルが不定ファイルであっても、この規則は当てはまる。
- OPEN文を実行しても、最初のデータレコードは入手も解放もされない。
- SELECT句中で指定したファイルの外部名は、下記のように処理される。
- INPUTを指定した場合、OPEN文を実行すると、入力ファイルを開くためのオペレーティング システムの規則に従って、割り当てられた名前が検査される。
- OUTPUTを指定した場合、OPEN文を実行すると、出力ファイルを開くためのオペレーティング システムの規則に従って、割り当てられた名前が書き出される。
- ファイル名-1、ファイル名-2、ファイル名-3、ファイル名-4のファイル記述項は、そのファイルを作成したときと同じにする。
-
INPUTまたはI/O を指定して開いたファイルに関して、OPEN文はファイル位置指示子を設定する。その値は、索引ファイルと順編成ファイルに関してはファイル内に現存する最初のレコードとされ、相対ファイルに関してはレコード番号1とされる。ファイル中にレコードが存在しないと、索引データまたは順編成ファイルが次に読まれたときにファイル終了条件が発生するように、ファイル位置指示子が設定される。ファイルそのものが存在しないと、OPEN INPUT文は誤り状態となる。
-
I-Oを指定して開いたファイルのLABEL RECORDS句に、ラベル レコードがあると指定されていると、OPEN文の実行に下記の処理が含められる。
- 入出力両用ファイルのラベルの検査に関するオペレーティング システムの規則に従って、ラベルが検査される。
- 入出力両用ファイルのラベルの書出しに関するオペレーティング システムの規則に従って、ラベルが書き出される。
- OUTPUTを指定したOPEN文の実行が正常に終了すると、ファイルが作成される。その時点では、そのファイルにはまだレコードは含まれていない。同じ名前のファイルが存在すると、そのファイルは削除される。そのファイルが書き込み保護されていると、誤りが発生する。
-
EXTENDを指定すると、OPEN文はファイルへの次の書き出し位置を、そのファイルの最後の論理レコードの直後に位置付ける。順編成ファイルの場合、最後の論理レコードは最後にファイルに書き出されたレコードである。相対ファイルの場合、最後の論理レコードは現存するレコードの中で相対レコード番号が最も大きいものである。索引ファイルの場合、最後の論理レコードは現存するレコードの中で主レコードキーの値が最も大きいものである。
-
OPEN文を実行すると、FILE STATUSデータ項目の値が更新される(手続き部の入出力状態節を参照)。
-
該当するファイルのSELECT/ASSIGN文の中でLOCK MODE IS EXCLUSIVEを指定してあると、OPEN文が正常に実行されたときに、ファイルはその実行単位用に排他的にロックされる。
-
該当するファイルのSELECT/ASSIGN文の中でLOCK MODE IS AUTOMATICまたはLOCK MODE IS MANUALを指定してあると、OPEN文の実行が正常に終了したときに、ファイルは共有可能とされる。共有可能なファイルは、複数の実行単位から正常に開くことができる。
-
OUTPUT用に開いたファイルおよびEXTEND用に開いた相対および索引ファイルは、暗黙的に排他的にロックされたものと定義される。したがって、そのファイルは共有できない。
-
I-O用に開いた共有ファイルについてだけ、レコード ロックを得ることができる。
- OPEN文の実行が不成功に終わると、物理ファイルは影響を受けず、下記の処理が順に行われる。
- 該当するファイルに対応する入出力状態に、OPEN文の実行が不成功に終わった理由を示す値が設定される。
- 実行すべき条件に該当するUSE AFTER EXCEPTION手続きがあれば、それが実行される(手続き部 - SEARCH - WRITEの章のUSE(使用)文USE(使用)文節を参照)。
-
I-Oを指定してファイルを開くと、そのファイルには入力操作も出力操作も加えることができる。ファイルが存在しないときは、下記の規則が適用される。
- OPTIONALを指定してあれば、ファイルが作成される。
- NOT OPTIONALを指定してあれば、誤りが発生する。
-
どちらの句も指定しないで、OPTIONAL-FILE 指令を原始要素のコンパイル時に指定してあれば、ファイルが作成される。
- どちらの句も指定しないで、NOOPTIONAL-FILE指令を原始要素のコンパイル時に指定してあれば、誤りが発生する。
- 入力ファイルのSELECT句にOPTIONAL指定をしていると、ファイルのオープン時に そのファイルの有無を尋ねてくる。そのファイルが存在しないと、最初にREAD文を実行したときに、ファイル終了条件が発生する。
- EXTENDを指定すると、OPEN文はファイルへの次の書き出し位置を、そのファイルの最後の論理レコードの直後に位置付ける。以降、そのファイルを対象にWRITE文を実行すると、OUTPUTを指定したかのように、レコードがそのファイルに追加される。ファイルが存在しない場合は、作成される。
-
EXTENDを指定したファイルのファイル記述項にLABEL RECORDS句が指定してあると、OPEN文の実行に下記の処理も含められる。
- 単一リール/ユニット ファイルの場合だけ、開始ファイル ラベルが処理される。
- 最後に存在するリール/ユニット上の開始リール/ユニット ラベルは、そのファイルを INPUTを指定して開いたかのように処理される。
- 既存の終了ラベルは、そのファイルをINPUTを指定して開いたかのように処理される。その後で、終了ラベルは削除される。
- その後、そのファイルをOUTPUTを指定して開いたかのように処理が続行される。
- I/Oを指定すると、 ファイルを入力と出力の両方の処理用に開ける。
ただし、 ORGANIZATION LINE SEQUENTIALのファイルを除く。
該当のファイルが存在しない場合には、そのファイルが作成されて、入力用には空のファイルとして使用される。
ただし、SELECT文にNOT OPTIONALが指定された場合は別である。
作成されたばかりのファイルから読み込みを行うと、エラーとなる。
-
SHARING指定は共有ファイルに対してのみ指定できる(翻訳集団の概念の章の共有モード節を参照)。
-
SHARING指定は、ファイルを共有しているファイル結合子を通じて、対象のファイルにどのような処理を行えるかを示す(翻訳集団の概念の章の共有モード節を参照)。
-
Tファイル名に関連するファイル結合子のファイル管理記述項に記述されているSHARING指定よりも、このSHARING指定が優先する。OPEN文にSHARINGが指定されていない場合、ファイルの共有はファイル管理記述項によって全面的に指定される。OPEN文にSHARING指定がなく、ファイル管理記述項にもSHARING句が指定されていない場合、該当のファイル結合子に関する共有モードは、Sharingモードに応じて設定される。このとき適用される規則は、翻訳集団の概念の章の共有モードで解説する。
形式 1(レコード順編成ファイル)
- ファイルの記憶媒体が巻き戻し可能なものであるときは、下記の規則が適用される。
- OPEN文を実行すると、ファイルの先頭に現在位置が位置付けられる。
- REVERSED指定があるときは、OPEN文を実行すると、ファイルの末尾に現在位置が位置付けられる。
- REVERSED指定があるときは、そのファイルに対して以降READ文を実行すると、データは逆の順に、つまり最後のレコードから読み込まれる。
形式 2(行順編成ファイル)
-
行順編成ファイルに対しては、I-Oモードを適用することはできない。ただし、REWRITE-LS 指令を設定した場合は、そのかぎりではない。
形式 3(桁詰めデータ項目)
- 桁詰めデータ項目に対してOPEN文を実行する場合は、それが完了する前に、このデータ項目を参照する他の文を実行することはできない。
- OPEN文の実行が完了したかどうかにより、桁詰めデータ項目が使用可能かどうかが決定される。
- OPENの実行により、特殊レジスタ、RETURN-CODEが、桁詰めデータ項目ライブラリ手順について指定された値の一つに更新される。
- 桁詰めデータ項目に対するOPEN文の最初の実行の後、その後に同じデータ項目に対して実行されるOPEN文は、このデータ項目に対するCLOSE文が実行された後に実行されるものとする。
- 一意名-1がイベントデータ項目を参照する場合は、OPEN文の実行により、このデータ項目がFALSEに初期化される。
- 一意名-1がモニターデータ項目を参照する場合は、OPEN文の実行により、モニターがNOT BROWSING、NOT READING、およびNOT WRITINGに初期化される。
- 一意名-1がミューテックスデータ項目を参照する場合は、OPEN文の実行により、このデータ項目がOFFに初期化される。
- 一意名-1がセマフォデータ項目を参照する場合は、OPEN文の実行により、 このデータ項目がゼロに初期化される。