パスからファイル名、拡張子、ディレクトリ等の情報を取得する

パスからファイル名、拡張子、ディレクトリ、ディレクトリ名、ルートを取得することは多々あると思います。
毎回考えていると面倒なので、コードをまとめてみます。

スポンサーリンク

パスからファイル名、拡張子などの情報を取得する

例として次のようなパスの場合を考えます。
パス= C:\temp\dir1\dir2\hoge.sas

このパスからファイル名、拡張子、ディレクトリ、ディレクトリ名、ルートを取得します。
期待する結果は次のとおりです。

取得情報マクロ変数名結果
ファイル名filenamehoge.sas
拡張子extsas
ディレクトリdrctC:\temp\dir1\dir2
ディレクトリ名drctnamedir2
ルートrootC:

このあたりの表現は考え出すと難しい…。

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;

注意!

バックスラッシュと円マークが混在して表示される場合がありますが、コピペすれば環境に合わせてどちらかに統一されると思います。
私の環境では円マークでした。

現在実行しているプログラムのパスを取得する

現在実行しているプログラムのパスを取得する方法はこちらで紹介しています。

スポンサーリンク