パスからファイル名、拡張子、ディレクトリ、ディレクトリ名、ルートを取得することは多々あると思います。
毎回考えていると面倒なので、コードをまとめてみます。
パスからファイル名、拡張子などの情報を取得する
例として次のようなパスの場合を考えます。
パス= C:\temp\dir1\dir2\hoge.sas
このパスからファイル名、拡張子、ディレクトリ、ディレクトリ名、ルートを取得します。
期待する結果は次のとおりです。
取得情報 | マクロ変数名 | 結果 |
---|---|---|
ファイル名 | filename | hoge.sas |
拡張子 | ext | sas |
ディレクトリ | drct | C:\temp\dir1\dir2 |
ディレクトリ名 | drctname | dir2 |
ルート | root | C: |
このあたりの表現は考え出すと難しい…。
SASプログラム
SCAN関数で実装したプログラムを紹介します。
コード自体はたいしたことないですね。
SAS
/* パスからファイル名、拡張子、ディレクトリ、ディレクトリ名、ルートを取得 */
%let path= C:\temp\dir1\dir2\hoge.sas;
%put &path;
/* ファイル名 */
%let filename= %SCAN(&path,-1,'¥');
%put &filename;
/* 拡張子 */
%let extension= %SCAN(&path,-1,'.');
%put &extension;
/* ディレクトリ */
%let drct=%substr(&path, 1, %length(&path)-%length(%SCAN(&path,-1,'\'))-1);
%put &drct;
/* ディレクトリ名 */
%let drctname=%SCAN(&drct,-1,'¥');
%put &drctname;
/* ルート */
%let root=%SCAN(&path,1,'¥');
%put &root;
fa-exclamation-triangle
注意!
バックスラッシュと円マークが混在して表示される場合がありますが、コピペすれば環境に合わせてどちらかに統一されると思います。
私の環境では円マークでした。
私の環境では円マークでした。
現在実行しているプログラムのパスを取得する
現在実行しているプログラムのパスを取得する方法はこちらで紹介しています。