OPEN ステートメント
OPEN ステートメントは、ファイルの処理を開始します。
ラベルのチェックまたは書き込み、あるいはその両方を行います。
| フォーマット 1: 順次ファイル |
 >>-OPEN--------------------------------------------------------->
.-----------------------------------------------------------.
| .--------------------------------------------. |
V V | |
>----+-INPUT----ファイル名-1--+--------------------------+-+-+-+-><
| | (1) | |
| +-REVERSED-----------------+ |
| | (1) | |
| '-+------+--NO REWIND------' |
| '-WITH-' |
| .---------------------------------------. |
| V | |
+-OUTPUT----ファイル名-2--+---------------------+-+-----+
| '-+------+--NO REWIND-' |
| '-WITH-' |
| .--------------. |
| V | |
+-I-O----ファイル名-3-+---------------------------------+
| .--------------. |
| V | |
'-EXTEND----ファイル名-4-+------------------------------'
|
注:
- REVERSED および WITH NO REWIND 句は 構文チェックされますが、プログラムの実行には何も影響しません。。
| フォーマット 2: 索引付きファイルおよび相対ファイル |
 .------------------------------.
| .--------------. |
V V | |
>>-OPEN----+-INPUT----ファイル名-1-+--+-+----------------------><
| .--------------. |
| V | |
+-OUTPUT----ファイル名-2-+-+
| .--------------. |
| V | |
+-I-O----ファイル名-3-+----+
| .--------------. |
| V | |
'-EXTEND----ファイル名-4-+-'
|
| フォーマット 3: 行順次ファイル |
 .------------------------------.
| .--------------. |
V V | |
>>-OPEN----+-INPUT----ファイル名-1-+--+-+----------------------><
| .--------------. |
| V | |
+-OUTPUT----ファイル名-2-+-+
| .--------------. |
| V | |
'-EXTEND----ファイル名-4-+-'
|
INPUT、
OUTPUT、I-O、および EXTEND 句は、ファイルのオープンに使用するモードを指定します。
キーワード OPEN と共に、INPUT、OUTPUT、I-O、または EXTEND の各句のうち少なくとも 1 つを指定しなければなりません。INPUT、
OUTPUT、I-O、および EXTEND の句は、任意の順序で指定できます。
- INPUT
- 入力操作を実行できます。
- OUTPUT
- 出力操作を実行できます。この句は、ファイルの作成時に指定することができます。
レコードを含むファイルに対して OUTPUT を指定しないでください。このファイルは新規データに置き換えられます。
- I-O
- 入力操作と出力操作の両方を実行できます。I-O 句は、直接アクセス装置に割り当てられているファイルに対してのみ指定することができます。
I-O 句は行順次ファイルには無効です。
- EXTEND
- ファイルを追加またはファイルを作成する出力操作を実行できます。
EXTEND 句を順次アクセス・ファイルで使用できるのは、新規データが昇順で作成されている場合だけです。EXTEND 句は、LINAGE 文節が指定されたファイルで使用可能です。
- ファイル名-1、ファイル名-2、ファイル名-3、ファイル名-4
- OPEN ステートメントによる処理の対象となるファイルを指定します。複数のファイルを指定する場合、それらのファイルは同一の編成やアクセス・モードを持つ必要はありません。各ファイル名は、データ部の FD 項目に定義されていなければならず、また、ソート・ファイルやマージ・ファイルにすることはできません。FD 項目は、ファイルが定義されるときに提供された情報と同じでなければなりません。
- REVERSED
- REVERSED 句は構文チェックされますが、プログラムの実行には何も影響しません。
- NO REWIND
- NO REWIND 句は構文チェックされますが、プログラムの実行には何も影響しません。
一般規則
- INPUT 句を付けてオープンしたファイルがオプショナル・ファイルであり、
それが存在しない場合、OPEN ステートメントは、
オプショナル入力ファイルが存在しないことを示すようにファイル位置標識を設定します。
- OPEN INPUT ステートメントや OPEN I-O ステートメントが実行されると、
ファイル位置標識は、次のように設定されます。
- 索引ファイルについては、そのファイルに関連する照合シーケンスにおける、最低の順序位置を持つ文字。
- 順次ファイルおよび相対ファイルの場合は、1。
- EXTEND 句を指定する場合は、OPEN ステートメントは、
ファイル位置標識をそのファイルに書き込まれた最後のレコードの直後に位置付けます (最高の第 1 レコード・キー値を持つ (索引ファイルの場合) か、または相対キー値を持つ (相対ファイルの場合) レコードは、
最後のレコードとみなされます)。それ以後に実行される WRITE は、
そのファイルが OUTPUT としてオープンされているかのように、レコードを追加します。
EXTEND 句を指定できるのは、ファイル作成時ですが、
その他にもレコードが入ったファイル、
または削除されたレコードが入っていたファイルに指定することもできます。
- EXTEND 句が指定されていない場合、OPEN ステートメントによって、ファイル位置標識がファイルの先頭に位置付けられます。
ラベル・レコード
ラベル処理はサポートされていません。以下の言語エレメントのいずれかが検出されると、警告メッセージが出されます。
- LABEL RECORDS IS データ名
- USE...AFTER...LABEL PROCEDURE
- GO TO MORE-LABELS
-
-
OPEN ステートメントに関する注意事項
- OPEN ステートメントが正常に実行されると、そのファイルは使用可能であると判別され、
オープン・モードになります。ファイルが使用できるのは、そのファイルが物理的に存在し、入出力制御システムによって認識されるものである場合です。以下の表は、
使用可能なファイルと使用可能でないファイルに対してオープンを行った結果を示したものです。ファイルの使用可能性の詳細については、「COBOL for Windows プログラミング・ガイド」を参照してください。
表 48. ファイルの使用可能性
| OPEN の形式 |
ファイルが
使用可能 |
ファイルが使用可能でない |
| INPUT |
通常のオープン |
オープンに失敗する |
| INPUT (オプショナル・ファイル) |
通常のオープン |
通常のオープン。最初の読み取りにより、終了条件または無効キー条件が生じる |
| I-O |
通常のオープン |
オープンに失敗する |
| I-O (オプショナル・ファイル) |
通常のオープン |
オープンするとファイルが作成される |
| OUTPUT |
通常のオープン。ファイルにレコードが入っていない。 |
オープンするとファイルが作成される |
| EXTEND |
通常のオープン |
オープンに失敗する |
| EXTEND (オプショナル・ファイル) |
通常のオープン |
オープンするとファイルが作成される |
- OPEN ステートメントが正常に実行されると、ファイルがオープン状態になり、関連するレコード域はプログラムに対して使用可能になります。
- OPEN ステートメントは最初のデータ・レコードを取得または解放しません。
- レコード域との間でデータをやり取りできるのは、ファイルがオープン状態になっている場合のみです。
- 使用可能な任意の入出力ステートメントを使用する場合も、
その実行前に OPEN ステートメントが正しく実行されていなければなりません (USING 句または GIVING 句付きの SORT や MERGE ステートメントを除く)。
以下の表では、'X' はステートメントが、最上段に示されているオープン・モードで使用できることを意味しています。
表 49. 順次ファイルで使用可能なステートメント
| ステートメント |
入力オープン・モード |
出力オープン・モード |
I-O オープン・モード |
拡張オープン・モード |
| READ |
X |
|
X |
|
| WRITE |
|
X |
|
X |
| REWRITE |
|
|
X |
|
以下の表では、'X' は、その行に示されているアクセス・モードで使用されると、
上段に示されたオープン・モードで使用できることを意味します。
表 50. 索引付きファイルと相対ファイルで使用可能なステートメント
| ファイル・アクセス・モード |
ステートメント |
入力オープン・モード |
出力オープン・モード |
I-O オープン・モード |
拡張オープン・モード |
| 順次 |
READ |
X |
|
X |
|
| WRITE |
|
X |
|
X |
| REWRITE |
|
|
X |
|
| START |
X |
|
X |
|
| DELETE |
|
|
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 |
|
以下の表では、'X' はステートメントが、最上段に示されているオープン・モードで使用できることを意味しています。
表 51. 行順次ファイルで使用可能なステートメント
| ステートメント |
入力オープン・モード |
出力オープン・モード |
I-O オープン・モード |
拡張オープン・モード |
| READ |
X |
|
|
|
| WRITE |
|
X |
|
X |
| REWRITE |
|
|
|
|
- 同一プログラムの中で、1 つのファイルを INPUT、OUTPUT、I-O、または EXTEND
(順次ファイルおよび行順次ファイルのみ) としてオープンすることができます。該当のファイルに対する最初の OPEN ステートメントの実行後、それ以降の各 OPEN ステートメントを実行するたびに、その前に LOCK 句指定のない CLOSE ファイル・ステートメントを実行しなければなりません。
- ファイル制御項目内に FILE STATUS 文節が指定されている場合は、
関連するファイル状況キーが、OPEN ステートメントの実行時に更新されます。
- すでにオープン状態になっているファイルに対して OPEN ステートメントを発行すると、
そのファイルに対して EXCEPTION/ERROR プロシージャーが指定されていれば、それが実行されます。
|