|
はじめましてsouです。
このフォーラムで秀丸マクロのことをいろいろ勉強したいと思いますが、
これからよろしくお願いします。
さっそく今回の質問ですが、
あるファイルのリストがあって、そのリストに載っているすべてのファイル
に対して同じ処理をするマクロを作ってみました。
内容は以下です。
// --------<< リストファイルから実行するマクロ >>-----------
// --------<< リスト中のファイルを順番に開き、処理を施す >>-----------
#ERR_NUM = 0;//エラーカウンター
gofiletop;//ファイルの先頭に移動
#LIST_HANDLE = hidemaruhandle(0); //リストファイルのハンドルを取得する
//-------作業ループ開始--------
while(code != eof){
//------現在の行のファイル名の取得開始--------
copyline; //一行コピー
beginclipboardread; //クリップボードから取得開始
$FILE_NAME = getclipboard;//クリップボードから一行取得
$FILE_NAME = leftstr( $FILE_NAME, strlen($FILE_NAME) - 1 );//改行の除去
if( $FILE_NAME == ""){ //空白行を飛ばす
movetolineno 1, lineno + 1;
continue;
}
#FF = existfile($FILE_NAME);//ファイル存在チェック
if( #FF == 0 ){
message "ファイルは存在しない" + $FILE_NAME;//存在しないと警告
movetolineno 1, lineno + 1;
#ERR_NUM = #ERR_NUM + 1;
if(#ERR_NUM >= 5) break;// 5 回以上発生すると終了
continue; //存在しない行を飛ばす
}
//------現在の行のファイル名の取得終了--------
#H_ORDER = findhidemaru($FILE_NAME);
if (#H_ORDER != -1) { // ウィンドウが見つかった
#WORK_HANDLE = hidemaruhandle(#H_ORDER); // ウィンドウハンドルを取得
setactivehidemaru #WORK_HANDLE; // そのウィンドウを手前にする
} else { // まだ開かれていないか、自分で開いているか
if ($FILE_NAME != filename) { // まだ開かれていなかった
openfile "/h " + $FILE_NAME; // 新しく開く
if (result == false) {
message "ファイルオープンできません" + $FILE_NAME;
endmacro;
}
}
#WORK_HANDLE = hidemaruhandle(0);
}
//------作業ファイル中で処理開始-------
//------ここでここの作業ファイルに対して処理を施す----
execmacro "work1.MAC";
//------作業ファイル中で処理終了-------
setactivehidemaru #LIST_HANDLE;//リストファイルに戻る
closehidemaruforced #WORK_HANDLE;//作業ファイルを閉じる
movetolineno 1, lineno + 1;//次の行へ進む
}
//-------作業ループ終了--------
endmacro;
このマクロはリストファイルから実行し、作業ファイルを次々と開き、
work1.MACの処理をした後に上書保存して閉じることを繰り返すものです。
問題になるのは開くファイルが多くなると(30以上、数は不定)、
処理途中で作業ファイルが閉じられず、処理が
リストファイルに帰って来なくなります。
(closehidemaruforced がうまく動いてない?)
そこで変なファイル名を開こうとして、処理が途中で終了します。
このマクロのどこがおかしいでしょうか。
長くなりましたが、分かる方は教えてください。
よろしくお願いします。
|
|