たとえば、「C:\TEST」というパスに 「A.txt」「B.txt」「C.txt」 というファイルがあったとします。
これらにファイル参照名を割り当てたいとします。
ファイル参照名を割り当てる構文
FILENAME ファイル参照名 "割り当てるファイルのフルパス"; |
例
* ファイル参照名の割り当て ; filename myfile1 "C:\TEST\A.txt"; filename myfile2 "C:\TEST\B.txt"; filename myfile3 "C:\TEST\C.txt"; |
注意:
FILENAMEステートメントに存在しないファイルを指定した場合、その存在しないファイルにファイル参照名が割り当てられます。特にエラー等のメッセージも出ません。
ファイル参照名を割り当てる構文
リターンコードを格納する変数 = FILENAME( "ファイル参照名", "割り当てるファイルのフルパス" ); |
- 割り当てが成功したか失敗したか、などの情報はログに表示してくれません。
- その代わり、FILENAME関数のリターンコードには以下が格納される。
- FILENAME関数の操作が成功した場合「0」
- FILENAME関数の操作が何かしら成功しなかった場合は「0以外」(成功しなかった場合のメッセージはSYSMSGという関数で取得できる)
- ただし「ファイル参照をいっぺんに取り消す方法」でも触れましたが、FILENAME関数のリターンコードが意図通りにならないケースがありました。なのであまりリターンコードは信用しないほうが良いかと個人的に思ってます。
- FILENAMEステートメントと同様で、FILENAME関数に存在しないファイルを指定した場合、その存在しないファイルにファイル参照名が割り当てられます。特にエラー等のメッセージも出ません。
例
* ファイル参照名を割り当てる ; data _null_; length msg $2000.; rc = filename( "myfile1", "C:\TEST\A.txt" ); if rc^=0 then do; msg=sysmsg(); put msg; end; rc = filename( "myfile2", "C:\TEST\B.txt" ); if rc^=0 then do; msg=sysmsg(); put msg; end; rc = filename( "myfile3", "C:\TEST\C.txt" ); if rc^=0 then do; msg=sysmsg(); put msg; end; run; |
以下のようにDOループなどを使っていっぺんに割り当てたり、色々工夫の余地があります。
* ファイル参照名を割り当てる ; data _null_; length x msg $2000.; do x = "A", "B", "C"; i + 1; rc = filename( cats( "myfile", i ) , cats( "C:\TEST\", x, ".txt" ) ); if rc^=0 then do; msg=sysmsg(); put msg; end; end; run; |
0 件のコメント:
コメントを投稿