実行しているプログラムファイル名の取得
[OS] ALL
[リリース] SAS System 8, 9
[キーワード] program file name, dectionary table
[質問]
実行しているプログラムファイルの名前を、マクロ変数として取得したいのですが、どうすれば可能でしょうか。
[回答]
SQLプロシジャで dictionary.extfiles ディクショナリを検索することにより、最後に開かれたファイル名を取得することができます。 OBS fileref xpath xengine 1 #LN00004 TERMINAL 2 #LN00005 C:¥filename.sas 3 #LN00001 C:¥Program Files¥SAS Institute¥SAS¥V8¥NLS¥ja¥sasmsg 4 #LN00001 C:¥Program Files¥SAS Institute¥SAS¥V8¥core¥sasmsg . . . (以下略)
ファイル名は、変数 xpath に格納されています。また fileref は、新しいファイルが開かれるたびに番号が上がっていきます。 PROC SQL NOPRINT; SELECT xpath INTO :filename FROM ( SELECT INPUT(SUBSTR(fileref,4),5.) AS file_number, xpath FROM dictionary.extfiles WHERE UPCASE(SCAN(xpath,-1,'.')) = 'SAS' ) HAVING file_number=MAX(file_number); QUIT; /* フルパスからファイル名のみを取得(Windowsの場合) */ %LET filename=%SCAN(&filename,-1,'¥'); /* ファイル名の出力 */ %PUT "このファイルは &filename です。";
SQLプロシジャでは、まず fileref の値のうち先頭4文字目以降をSUBSTR関数で取り出し、INPUT関数で数値型の値に変換しています。
ファイル名はINTO句によってマクロ変数filenameに格納されます。ただしこれはフルパスで記述されています。
※ Windows環境での例です。UNIX環境の場合は、「¥」の代わりに「/」を指定します。
なお、このプログラムで得られるのは、正確には「最後に開いたファイル名」です。したがって、このプログラムを実行する前に別のファイルを開いてしまうと、後から開いた方のファイル名を取得することになってしまいますのでご注意ください。 |