1つまたはすべてのファイル参照を取り消す方法を紹介します。
ファイル参照を取り消す構文
FILENAME ファイル参照名 CLEAR; |
すべてのファイル参照を取り消す構文
FILENAME _ALL_ CLEAR; |
例
* 適当にファイル参照を割り当て ; filename test1 "適当なファイルパス1"; filename test2 "適当なファイルパス2"; * ファイル参照「TEST2」のみ取り消す ; filename test2 clear; |
ファイル参照を取り消す構文
リターンコードを格納する変数 = FILENAME( "ファイル参照名" ); |
- 取り消しが成功したか失敗したか、などの情報はログに表示してくれません。
- その代わり、FILENAME関数のリターンコードには以下が格納される。
- 取り消せた場合「0」
- なんらかのERROR、WARNINGなど特記事項がある場合は「0以外」(特記事項はSYSMSGという関数で取得できる)
- ただし、うまくいかないケースを見つけました(記事の最後に解説してます)
例
* 適当にファイル参照を割り当て ; filename test1 "適当なファイルパス1"; filename test2 "適当なファイルパス2"; * ファイル参照「TEST1」「TEST2」を取り消す ; data _null_; length msg $2000.; rc = filename( "test1" ); if rc^=0 then do; msg=sysmsg(); put msg; end; rc = filename( "test2" ); if rc^=0 then do; msg=sysmsg(); put msg; end; run; |
以下のようにDOループなどを使ってドカッと取り消したり、色々工夫の余地があります。
* 適当にファイル参照を割り当て ; filename test1 "適当なファイルパス1"; filename test2 "適当なファイルパス2"; filename test3 "適当なファイルパス3"; * ファイル参照「TEST1」~「TEST3」を取り消し ; data _null_; length msg $2000.; do i = 1 to 3; rc = filename( cats( "test", i ) ); if rc^=0 then do; msg=sysmsg(); put msg; end; end; run; |
上の例を簡単に説明しておくと、
- DOループで変数 i の値を1~3まで変化させながら、
- CATS関数で "test" という文字と変数 i の値を結合します。
- その結合した文字が表すファイル参照名をFILENAME関数で取り消しています。
注意点
「存在しないファイル参照名」を取り消そうとした場合、
FILENAMEステートメントの場合は、WARNINGが出力されますが、
filename abcd clear; ログ(ファイル参照名が存在しない場合): WARNING: ABCDが割り当てられていません。 |
FILENAME関数で「存在しないファイル参照名」を取り消そうとすると、なぜかリターンコードに0が返されました(失敗扱いにならない)
そのため、SYSMSG関数でWARNINGやERROR等のメッセージを取得することが出来ませんでした。
ログにメッセージが出てくれないと困る、という場合はFILENAME関数ではなく、FILENAMEステートメントを用いる必要があります。
0 件のコメント:
コメントを投稿