[ 新規に投稿する ]

フルパスをディレクトリとファイル名に分解する方法No.10579
でがらし さん 25/02/24 12:24 [ コメントを投稿する ]
   文字列入力した任意のファイルのフルパスを、ファイル名とそれ以外の部分(ディレクトリ)に区別して文字列として取り出す方法を教えていただけないでしょうか?

 例を挙げます。

ファイルのフルパス: a:\b\c\d.000
ファイル名: d.000
ファイルのディレクトリ: a:\b\c

 秀丸の grep を元来の grep のようにベタ打ちで利用するマクロの作成を考えていて、ここで行き詰まりました。grep に限らず、他の用途にも使うことを考えています。
[ ]
RE:10579 フルパスをディレクトリとファイル名に分解する方法No.10580
こみやんま さん 25/02/24 12:53 [ コメントを投稿する ]
  「素の秀丸マクロ」でやるなら、概ね以下の2系統に分類されていくかと思います。

//--------------------------- 通常の方法
$FileFullPath = @"C:\abc\efg\def.txt";

#objFSO = createobject("Scripting.FileSystemObject");

$FileName = member( #objFSO, "GetFileName", $FileFullPath );
message("ファイル名:" + $FileName);

$DirectoryName = member( #objFSO, "GetParentFolderName", $FileFullPath );
if ($DirectoryName == "" || $DirectoryName == "0" ) {
    message("ディレクトリ名:" + "なし");
} else {
    message("ディレクトリ名:" + $DirectoryName);
}



//--------------------------- 手製でやる方法
$FileFullPath = @"C:\abc\ggg\def.txt";

#nSplitArrayLength = split($SplitArray, $FileFullPath, @"\");

if (#nSplitArrayLength > 0) {
    #nLastIndex = #nSplitArrayLength - 1; // 長さから1引いたものが最後の要素のindex
    $FileName = $SplitArray[#nLastIndex];
    
    message("ファイル名:" + $FileName);

    // 最後の要素を消して...
    $SplitArray[#nLastIndex] = ""; // 厳密にはこの行は不要だけど気持ち悪いので
    #nSplitArrayLength = #nSplitArrayLength - 1; // 要素が1つ減った

    // まだ要素が残っている
    if (#nSplitArrayLength > 0) {
        $DirectoryName = join($SplitArray,#nSplitArrayLength, @"\" );
         message("ディレクトリ名:" + $DirectoryName);
    } else {
         message("ディレクトリ名:" + "なし");
    }
}

[ ]
RE:10580 フルパスをディレクトリとファイル名に分解する方法No.10589
でがらし さん 25/02/24 20:43 [ コメントを投稿する ]
  こみやんまさん

 早速のご教示、ありがとうございました。

 見慣れない関数と変数がたくさんあるので、私の能力では中身を読み取ることができませんが、ご教示の2案を、少々、錯誤の上、grep 用のマクロに組み込んで、ともに機能することを確認しました。

 実はディレクトリとファイル名を区分する方法を数ヶ月にわたって折々模索してきましたが、ようやく昔の grep と同じように利用することができます。ありがとうございました。お礼まで申し上げます。

[ ]

[ 新規に投稿する ]