†REXXのどろぬま†
作成開始日 2014.11.01
最終更新日 2014.12.02
PARSE VAR filename body '.' extで拡張子「ext」を抽出できる。 しかし、ディレクトリ名に「.」が含まれる場合(URL形式)や、 ファイル名に「.」が複数含まれるような場合には、これは正しく機能しない。 一つの解決策は;
fname=FILESPEC('N',filename) PARSE VAR fname body '.' extと下処理をしてパス部分を切除することだが、それでも複数「.」には対応できない。 そこで;
ext=SUBSTR(fname,LASTPOS('.',fname)+1)のように、末尾の「.」を検索する方法がある。 ただし、この方法では拡張子を持たないファイル名には対応できない。 ファイル名がそのまま拡張子とみなされてしまう。 と言うことで、完全形(関数形式)はと言われると;
GetExt: PROCEDURE; filename=Arg(1); fname=FILESPEC('N',filename); IF POS('.',fname)=0 THEN ext='' ELSE ext=SUBSTR(fname,LASTPOS('.',fname)+1); RETURN ext;となるのだろうが、ちょっと仰々しすぎる。 現実的には、複数の「.」を含むファイル名は(私の環境では)滅多にないので;
fname = FILESPEC('N',filename) PARSE VAR fname body '.' extで十分なような気もする。ちなみに、FILESPECの値を直接分解するときは;
PARSE VALUE FILESPEC('N',filename) WITH body '.' extとする。parse varではなく、parase value〜withという構文になる。