Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, 言語解説書

暗黙オープン

OPEN ステートメントがまだ実行されていないファイルを参照する GET、PUT、READ、WRITE、LOCATE、REWRITE、 または DELETE ステートメントが実行されると、そのファイルは暗黙にオープンされます。

COPY オプション付きの GET ステートメントが実行されると、COPY オプションで指定したファイル、または出力ファイル SYSPRINT (COPY オプションでファイルの指定を省略したとき) が暗黙にオープンされることがあります。 COPY オプションで指定したファイルが暗黙にオープンされると、STREAM 属性と OUTPUT 属性が暗黙に定義されます。

表 32 は、左欄のステートメントによってファイルが暗黙に オープンされたとき、暗黙に定義される属性を示したものです。

表 32. 暗黙オープンによって暗黙に定義される属性
ステートメント 暗黙に定義される属性
GET STREAM、INPUT
PUT STREAM、OUTPUT
READ RECORD、INPUT
WRITE RECORD、OUTPUT
LOCATE RECORD、OUTPUT、SEQUENTIAL
REWRITE RECORD、UPDATE
DELETE RECORD、UPDATE
注:

UPDATE が明示的に宣言されていない場合に限り、INPUT および OUTPUT が READ および WRITE ステートメントのデフォルト属性になります。

表 32 のいずれかのステートメントによって ファイルを暗黙にオープンするということは、上記と同じ属性が指定されている ファイルに明示的な OPEN ステートメントを使用することと同じ効果があります。

ファイル宣言内に指定した属性と、ファイルをオープンした結果として暗黙に定義される属性との間に、矛盾があってはなりません。 例えば、INPUT 属性と UPDATE 属性は矛盾しており、UPDATE 属性と STREAM 属性も矛盾しています。

表 32 にリストされたデフォルトの属性が適用される前に、 前述の暗黙の属性が適用されます。 暗黙に定義される属性が矛盾を引き起こすこともあります。 デフォルトの属性が適用されたあとで属性が矛盾していると、UNDEFINEDFILE 条件が起こります。

表 33. 組み合わせ後の属性と暗黙に定義される属性
組み合わせ後の属性 暗黙に定義される属性
UPDATE RECORD
SEQUENTIAL RECORD
DIRECT RECORD、KEYED
PRINT OUTPUT、STREAM
KEYED RECORD

次の 2 つの例で、ファイル定数とファイル変数を使用して明示的にオープンし たときに組み合わせられる属性を示します。

ファイル定数の例

  declare Listing file stream;
  open file(Listing) print;

OPEN ステートメントが実行されると、属性が組み合わされて、STREAM と PRINT という属性が付けられます。 暗黙の属性が適用されて、属性は STREAM、PRINT、および OUTPUT となります。 デフォルトが適用されたあとの属性は、STREAM、PRINT、OUTPUT、および EXTERNAL となります。

ファイル変数の例

  declare Account file variable,
          (Acct1,Acct2)  file
          output;

  Account = Acct1;
  open file(Account) print;

  Account = Acct2;
  open file(Account) record unbuf;

ファイル Acct1 がオープンされて、 その属性 (明示的に宣言された属性と暗黙に定義された属性) は STREAM、 EXTERNAL、PRINT、および OUTPUT になります。 ファイル Acct2 が、RECORD、EXTERNAL、および OUTPUT の各属性を付けてオープンされます。

暗黙オープンの例

  declare Master file keyed internal;

  read file (Master)
       into (Master_Record)
       keyto(Master_Key);

組み合わせ (READ ステートメントの実行による暗黙オープンのため) 後の属性は、 KEYED、INTERNAL、RECORD、INPUT です ( そのほかに暗黙に定義される属性はありません)。 デフォルトが適用されたあとの属性は、KEYED、INTERNAL、RECORD、INPUT、SEQUENTIAL です。

ファイル定数の宣言の例

  declare File3 input direct environment( regional(1) )

この宣言は 3 つのファイル属性、INPUT、DIRECT、および ENVIRONMENT を指定します。 その他の暗黙に定義される属性は、FILE (3 つのうちどの属性によっても暗黙に 定義される)、および RECORD と KEYED (DIRECT によって暗黙に定義される) です。 有効範囲は、デフォルトによって EXTERNAL となります。 ENVIRONMENT 属性は、データ・セットが REGIONAL(1) 編成であることを表します。

先の宣言では、必要なすべての属性が DECLARE ステートメントで指定されているか、または暗黙に定義されています。 これらの属性を、OPEN ステートメントで変更 (または無効に) することはできません。

次の例のように宣言しておけば、invntry を別々の目的でオープンすることができます。

  declare invntry file;

次の例では、ファイル属性は、先の例の DECLARE ステートメントで 指定された (あるいは暗黙に定義される) 属性と同じになります。

  open file (Invntry)
       update sequential;

このようにしてオープンされたファイルがクローズされたあとであれば、別の一組の属性を指定して同じファイルをオープンすることができます。 例えば、次の OPEN ステートメントを使用すれば、KEYTO または KEY オプションを使用してレコードを読み取ることができます。

  open file (Invntry)
       input sequential keyed;

ファイルは SEQUENTIAL であるので、このデータ・セットを順次にアクセスすることも、 さらに、READ ステートメントで KEY オプションを指定すれば直接にアクセスすることもできます。 この種のファイルの場合、READ ステートメントで KEY オプションを指定すれば、指定したレコードが読み取られます。 後続の READ ステートメントで KEY オプションを省略すると、KEY 順の次のレコードから順次に読み取られます。


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)