|
>ただファイルが空ファイルのテキストや改行のみの場合は、うまく動いてくれません。
>空ファイルのテキストや改行のみの場合でもうまくいく方法はありますでしょうか?
>お忙しいところ恐縮ですが、よろしくお願い申し上げます。
空の内容でできないのは、秀丸エディタのマクロで使われる常套手段としてファ
イル一覧の取得にgrepを使っているためです。
grepで全ての文字にヒットするようにしてその一覧を取得している方法なので、
空のファイルでは取得できなです。
改行だけの場合は、"."ではなく"^"とするとできます。
例:
grep "^", "*" + $ext, $folder, regular, filelist;
grepを使わない場合は、いろいろファイル一覧の取得方法はあります。
例:
・マクロサーバを使う
・杉浦まさきさん作の田楽DLLまたは田楽サーバを使う(マクロサーバ互換)
・run "cmd.exe /c dir >con";をして整形する
・その他外部ソフトを使う
外部ソフトを導入したりと、いろいろ面倒ではあります。
V8.00以降では、COMに対応したことで、WSHで使われるファイル一覧取得の方法
も秀丸マクロ化して使えます。
この方法の場合は外部ソフトを導入したりせずに使えます。
例えば、元のマクロのgrep文を以下のように置き換えます。
//grep ".", "*" + $ext, $folder, regular, filelist;
call FileList $ext, $folder;
マクロの末尾(endmacroの後)に以下のサブルーチンを追加します。
FileList:
newfile;
$extParam = $$1;
$folderParam = $$2;
if(leftstr($extParam,1)=="."){
$extParam=rightstr($extParam,strlen($extParam)-1);
}
#objFs = createobject("Scripting.FileSystemObject");
#objFolder = member( #objFs, "GetFolder", $folderParam );
#objFiles = member( #objFolder, "Files" );
while( 1 ) {
#objFile = getcollection( #objFiles );
if( #objFile == 0 ) break;
$path = member( #objFile, "Path" );
$ext = member( #objFs, "GetExtensionName", $path );
$ext = tolower($ext);
if( $ext == $extParam ) { //*.txt
insert member( #objFs, "GetFileName", $path ) + "\n";
}
}
return;
|
|