前のページ|次のページ

MOPEN関数

ディレクトリIDとメンバ名でファイルを開き、ファイルIDまたは0のいずれかを返します。

カテゴリ: 外部ファイル
z/OS固有: ファイルシステム、オープンモード
UNIX固有: オープンモード

構文

必須引数

directory-id

ディレクトリが(通常はDOPEN関数により)開かれたときに割り当てられたIDを指定する数値変数です。

member-name

ディレクトリ内のメンバ名を指定する文字定数、変数または式です。

オプション引数

open-mode

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

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

record-length

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

record-format

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

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

詳細

MOPENはファイルのIDを返します。ファイルを開けなかった場合は0を返します。MOPENによって返されるfile-idは、FOPEN関数によって返されるfile-idと同じように使用できます。
注意:
OUTPUTモードを使用する場合は注意が必要です。
出力する既存のファイルを開くと、ファイルの現在の内容が警告なしに上書きされる場合があります。
メンバは、ファイル参照名ではなく、directory-idmember-nameで識別されます。また、FILENAMEを使用してディレクトリメンバを開いてメンバにファイル参照名を割り当て、その後にFOPENを呼び出すことができます。ただし、MOPENを使用するときには、各メンバに別個のファイル参照名を使用する必要がありません。
ファイルがすでに存在する場合、出力モードと更新モードは、FILENAMEステートメントまたは関数で指定された動作環境オプション(追加または置換)にデフォルト設定されます。次に例を示します。
%let rc=%sysfunc(filename(file, physical-name, , mod));
%let did=%sysfunc(dopen(&file));
%let fid=%sysfunc(mopen(&did, member-name, o, 0, d));
%let rc=%sysfunc(fput(&fid, This is a test.));
%let rc=%sysfunc(fwrite(&fid));
%let rc=%sysfunc(fclose(&fid));
'file'がすでに存在する場合、FWRITEはレコードをファイルの先頭に書き込むかわりに、新しいレコードを追加します。ただし、FILENAME関数で動作環境オプションが指定されていない場合、出力モードはレコードが置換されることを示します。
開けなかった場合は、SYSMSGを使用してメッセージテキストを取得します。
動作環境の情報: この説明中のディレクトリという用語は、動作環境で管理されるファイルをグループ化した集合を指します。これらのグループは、ホストの動作環境によってはディレクトリ、サブディレクトリ、フォルダ、MACLIB、分割データセットなど、さまざまな名前で識別されます。詳細については、お使いの動作環境向けのSASドキュメントを参照してください。動作環境によっては、ディレクトリメンバを開いて出力や追加処理を行うことができないことがあります。
z/OS固有: MOPENは、区分データセット(PDSおよびPDSE)のメンバおよびUNIXファイルシステム(UFS)ファイルに適用されます。z/OS環境では、MOPENは、PDSおよびPDSEのメンバを開いて出力処理のみを実行できます。また、UFSファイルを開いて出力処理または追加処理を実行できます。

この例では、ファイル参照名MYDIRをディレクトリに割り当てます。ディレクトリを開き、メンバ数を判断し、最初のメンバの名前を取得し、そのメンバを開きます。MOPENの最後の3つの引数はデフォルトです。マクロステートメントでは、文字列を引用符で囲みません。
%let filrf=mydir;
%let rc=%sysfunc(filename(filrf, physical-name));
%let did=%sysfunc(dopen(&filrf));
%let frstname=' ';
%let memcount=%sysfunc(dnum(&did));
%if (&memcount > 0) %then
   %do;
      %let frstname= 
         %sysfunc(dread(&did, 1));
      %let fid= 
         %sysfunc(mopen(&did, &frstname, i, 0, d));
      macro statements to process the member
      %let rc=%sysfunc(fclose(&fid));
   %end;
%else
   %put %sysfunc(sysmsg());
%let rc=%sysfunc(dclose(&did));

関連項目:

前のページ|次のページ|ページの先頭へ