前のページ|次のページ

FOPEN関数

外部ファイルを開いて、ファイル識別子の値を返します。

カテゴリ: 外部ファイル

構文

必須引数

fileref

外部ファイルに割り当てられたファイル参照名を指定する文字定数、変数または式です。

ヒント filerefが8文字よりも長い場合、8文字になるように切り捨てられます。

オプション引数

open-mode

ファイルへのアクセスの種類を指定する文字定数、変数または式です。

A APPENDモード:現在のファイルの最後の後に新しいレコードを書き込むことができます。
I INPUTモード:読み取り専用です(デフォルト)。
O OUTPUTモード:FILENAMEステートメントまたは関数の動作環境オプションで指定したデフォルトのOPENモードになります。動作環境オプションが指定されていない場合、ファイルの先頭に新しいレコードを書き込むことができます。
S Sequential Inputモード:パイプや他のシーケンシャルデバイス(ハードウェアポートなど)に使用されます。
U UPDATEモード:読み込みと書き込みの両方ができます。
デフォルト I

record-length

ファイルの論理レコード長を指定する数値定数、変数または式です。ファイルの既存のレコード長を使用するには、0の長さを指定するか、ここでは値を指定しません。

record-format

ファイルのレコード形式を指定する文字定数、変数または式です。既存のレコード形式を使用する場合は、ここでは値を指定しません。有効な値は、次のとおりです。

B データがバイナリデータとして解釈されます。
D デフォルトのレコード形式を使用します。
E 編集可能なレコード形式を使用します。
F 固定長レコードがファイルに含まれます。
P 動作環境に依存するレコード形式のプリンタ改行制御がファイルに含まれます。注: FBAまたはVBAレコード形式のz/OSデータセットの場合は、record-format引数に'P'を指定します。
V 可変長レコードがファイルに含まれます。
注: 引数が無効な場合、FOPENは0を返し、対応するエラーメッセージのテキストをSYSMSG関数から取得できます。引数が無効でもSASログにメッセージは生成されず、_ERROR_自動変数も設定されません。

詳細

一般情報

注意:
OUTPUTモードを使用する場合は注意が必要です。
出力のために既存のファイルを開くと、現在のファイルの内容が警告なしで上書きされます。
FOPEN関数は、読み込みまたは更新のために既存のファイルを開き、開いているファイルの識別に使用するファイル識別子の値を他の関数に返します。FOPEN関数を呼び出す前にファイル参照名を既存のファイルに関連付ける必要があります。ファイルを開くことができなかった場合、FOPENは0を返します。ファイル参照名は、FILENAMEステートメントまたはFILENAME外部ファイルアクセス関数を使用して割り当てることができます。一部の動作環境では、システムコマンドを使用してファイル参照名を割り当てることもできます。
FOPEN関数をマクロから呼び出す場合、マクロの関数に渡された呼び出しの結果のみが有効になります。FOPEN関数をDATAステップから呼び出す場合、同じDATAステップの関数に渡された結果のみが有効になります。
動作環境の情報: 動作環境によってはFCLOSEを使用する必要がない場合もありますが、FOPENを使用してファイルを開いた場合はDATAステップの最後でFCLOSE関数を使用することをお勧めします。FOPENの詳細については、現在の動作環境向けのSASドキュメントを参照してください。

z/OS固有の情報

z/OS環境では、FOPENを使用して開いたファイルは、DATAステップの終了時にFCLOSEを使用して閉じる必要があります。ファイルは、処理後に自動的には閉じません。
FOPENを使用して、open-mode属性で'S'を指定すると、まだ開かれていない入力ストリームデータを持つddnameファイルを開くことができます。
FOPEN関数のデフォルトのオープンモードは、Iモードです。このIは、入力を意味しますが、ランダムアクセスの意味も含んでいます。Iオープンモードは、NOTEおよびPOINT操作を内部的に実行できるため、シングルボリュームファイルの場合に使用できます。ただし、このオペレーティングシステムは、複数のボリュームにわたる1つのファイルのNOTEおよびPOINT操作には対応していません。複数のボリュームにまたがって記憶されている外部ファイルを開くためにI open-mode属性を使用すると、OPEN時にエラーフラグが表示されます。このような問題を回避する最良の方法は、FOPENのopen-mode属性でSを指定することです。S open-mode属性により、厳密な順次処理が要求されるため、競合は発生しません。

例1: デフォルトを使用してファイルを開く

この例では、ファイル参照名MYFILEを既存のファイルに割り当て、すべてのデフォルトを使用して入力のためにファイルを開きます。マクロステートメントでは、文字列を引用符で囲む必要はありません。
%let filrf=myfile;
%let rc=%sysfunc(filename(filrf, physical-filename));
%let fid=%sysfunc(fopen(&filrf));

例2: デフォルトを使用しないでファイルを開く

この例では、デフォルトを使用しないで入力のためにファイルを開きます。マクロステートメントでは、文字列を引用符で囲む必要はありません。
%let fid=%sysfunc(fopen(file2, o, 132, e));

例3: エラー処理

この例では、エラーの確認方法やSYSMSG関数がエラーメッセージを書き込む方法を示します。
data _null_; 
   f=fopen('bad', '?');
   if not f then do;
      m=sysmsg();
      put m;
      abort;
      end;
      ... more SAS statements ...
   run;

関連項目:

ステートメント:
FILENAME Statement (SAS ステートメント: リファレンス)
前のページ|次のページ|ページの先頭へ