エラーダイアログ「RightLocal:: miss」No.00746
さん 99/09/17 23:16
 
こんばんは。

Becky!のmbxファイルを操作するマクロを作成したのですが、大きめ(2MBぐらい)のフ
ァイルで、実行時に時々、表題にあるエラーが出ることがあり、困っています。同じ
ファイルに対して実行しても、エラーが出るときと出ない時があるので、ますます分
かりません。エラーが出ても、OKボタンを押せば進むようです。

下記にそのマクロを転載しますが、その中の「RemoveLineFeed:」を実行中によく起
こるようです。ちなみに、(en|dis)abledrawがコメントになったりしてるのは、その
場所によってエラーの出具合が違うかどうかいろいろ試した跡です。結局よく分かり
ませんでしたが。

このエラーを回避する方法は、ないでしょうか。


◆◆◆◆◆◆ここからマクロ◆◆◆◆◆◆
///////////////////////////////////////////////////////////////////////////////
// Becky! の *.mbx に次の処理を行うマクロ。
// ・各行末の無駄な空白を取り除く
// ・各メール末の無駄な改行を取り除く
// ・同名の *.idx ファイルを削除する
// 1999.09.17 Fumihiko Tanimura
///////////////////////////////////////////////////////////////////////////////

// 前処理
Prepare:
#start = tickcount;
 //disabledraw;

// 主処理
Main:
// 行末の無駄な空白を削除
callRemoveSpace;
// メール末の無駄な改行を削除
callRemoveLineFeed;
// 終了
goto Fin;

// 行末の無駄な空白を削除
RemoveSpace:
// ファイル先頭に移動
gofiletop;
disabledraw;
// 行末空白削除
replaceallfast"[  \\t]+$", "", regular;
enabledraw;
return;

// メール末の無駄な改行を削除
RemoveLineFeed:
// ファイル先頭に移動
gofiletop;
disabledraw;
// メール末改行削除
while (true){
///////↓ここにカーソル移動
// □□■↓
// ↓
// ↓(×1 以上)
// .↓
searchdown"[^\\n]\\n\\n\\n+\\.\\n", regular;
// 見つからなければ抜ける
if (!result)break;
// 次の行の先頭に移動
golineend2;
right1;
// その次も改行なら現在の改行を削除
while (true){
right1;
if (code == 0x0d){
backspace;
}else if (code == '.'){
break;
}else{
// ここに来ることはありえないが...
message "エラー発生!!";
goto Fin;
}
}
}
enabledraw;
return;

// *.mbx と同名の *.idx ファイルを削除
RemoveIndexFile:
// 現在のファイル (*.mbx)
$MbxFile = filename2;
// 削除するファイル (*.idx)
$IdxFile = leftstr($MbxFile, strlen($MbxFile) - 3) + "idx";
// 削除実行
runsync2"command.com /c del \"" + $IdxFile + "\"";
return;

// 終了処理
Fin:
gofiletop;
 //enabledraw;
#end = tickcount;
#time = (#end - #start) / 1000;
$timestr = "";
if ((#time / 3600) != 0){
$timestr = $timestr + str(#time / 3600) + "時間";
#time = #time % 3600;
}
if ((#time / 60) != 0){
$timestr = $timestr + str(#time / 60) + "分";
#time = #time % 60;
}
$timestr = $timestr + str(#time) + "秒";
$timestr = $timestr + str((#end - #start) % 1000) + "ミリ秒";
$mes = "マクロ実行終了しました。\n(所用時間 : " + $timestr + ")";
if (updated){
$mes = $mes + "\n今すぐ上書き保存しますか?";
question $mes;
if(result){
save;
// *.idx ファイルを削除
callRemoveIndexFile;
}
}else{
$mes = $mes + "\n変更点はありません";
message $mes;
}
// ウィンドウ閉じる(同時にマクロ終了)(マクロだけ終了したい時は exit をコメン
トに)
exit;
endmacro;
◆◆◆◆◆◆ここまでマクロ◆◆◆◆◆◆

[ ]
RE:00746 エラーダイアログ「RightLocal::No.00747
番頭++ さん 99/09/20 16:28
 
>このエラーを回避する方法は、ないでしょうか。

「秀丸エディタ 情報交換」
 04042 99/09/20 16:26  RE:03086 を見てください。


[ ]
RE:00746 エラーダイアログ「RightLocal::No.00748
秀丸担当 さん 99/09/20 18:44
 
>Becky!のmbxファイルを操作するマクロを作成したのですが、大きめ(2MBぐらい)の
>ファイルで、実行時に時々、表題にあるエラーが出ることがあり、困っています。
>同じファイルに対して実行しても、エラーが出るときと出ない時があるので、ます
>ます分かりません。エラーが出ても、OKボタンを押せば進むようです。

このエラーは是非こちらの環境でも再現させたいところです。
Becky!を入れていないのでまだ試してないのですが、適当に作った
テキストでも再現できるでしょうか。

ちなみに、エラー内容は、内部的な保険処理にひっかかったもので、
OKを押せば問題なく続行できると思います。

[ ]
RE:00746 エラーダイアログ「RightLocal:No.00749
ひろ さん 99/09/20 19:34
 
 文さん今日は、ひろです。
> Becky!のmbxファイルを操作するマクロを作成したのですが、大きめ(2MBぐらい)のフ
> ァイルで、実行時に時々、表題にあるエラーが出ることがあり、困っています。同じ
 これだけの長さの macro ですと、ちょっと初めから見ていくのは辛いですが、
> // Becky! の *.mbx に次の処理を行うマクロ。
 確か Becky! の *.mdx file は行頭に「.」のみがある行によって、次の
mail と区別している text file でしたよね。もし *.mdx に複数の文字
code が混在していないならば、以下の macro で同じことが出来ると思いま
す。保存する前に「問い合わせをするか?」「処理時間の計算をするか?」等
は適当に付けてやってください。

//------------------ begin macro -------------------------------------------
---
main:
  disabledraw;
  replaceallfast "[  \\t]+$", "", regular;
  call del_mail_end_ret;
  call RemoveIndexFile;
  saveexit;//保存して終了。macro は自動的に終わる。

del_mail_end_ret:
  replaceallfast "^\\n\\.\\n","\\.\\n",regular;
  while(result!=0)replaceallfast "^\\n\\.\\n","\\.\\n",regular;
  return;

RemoveIndexFile:
  call get_base_name filename2;
  $$IdxFile=$$return+".idx";
  runsync2"command.com /c del \""+$$IdxFile+"\"";
  return;

get_base_name:
  ##extension=strstr($$1,".");
  if(##extension==-1){
    message "拡張子が見つかりません。";
    endmacro;
  }$$1=leftstr($$1,##extension);
  while(1){
    ##extension=strstr($$1,".");
    if(##extension==-1)break;
    else $$1=leftstr($$1,##extension);
  }return $$1;
//------------------ end macro ---------------------------------------------
-----

[ ]
RE:00748 エラーダイアログ「RightLocal::No.00750
さん 99/09/20 22:17
 
>このエラーは是非こちらの環境でも再現させたいところです。
>Becky!を入れていないのでまだ試してないのですが、適当に作った
>テキストでも再現できるでしょうか。
>
>ちなみに、エラー内容は、内部的な保険処理にひっかかったもので、
>OKを押せば問題なく続行できると思います。

 下記 URL に、マクロとサンプルの *.mbx ファイルを置いておきました。
 なお、このファイルは窓の杜の ML です。(マクロの実験目的のみで使って下さい)

 同じファイルでもエラーが出るときと出ない時があり、出る場合でもエラーダイア
ログが出る回数も違います。このサンプルはかなり高い確率でエラーが出ました。

 ちなみに私の環境は Win98 で、 RAM は 256MB です。秀丸は 3.01 です。

 たしかにおっしゃるとおり、エラーは出ても結果は正しいようです。

http://iris.sts.co.jp/~2315/pub/hide_mac_test/

[ ]
RE:00749 エラーダイアログ「RightLocal:No.00751
さん 99/09/20 22:21
 
>> Becky!のmbxファイルを操作するマクロを作成したのですが、大きめ(2MBぐらい)のフ
>> ァイルで、実行時に時々、表題にあるエラーが出ることがあり、困っています。同じ
> これだけの長さの macro ですと、ちょっと初めから見ていくのは辛いですが、
>> // Becky! の *.mbx に次の処理を行うマクロ。
> 確か Becky! の *.mdx file は行頭に「.」のみがある行によって、次の
>mail と区別している text file でしたよね。もし *.mdx に複数の文字
>code が混在していないならば、以下の macro で同じことが出来ると思いま
>す。保存する前に「問い合わせをするか?」「処理時間の計算をするか?」等
>は適当に付けてやってください。

こんばんは。
エラーとは関係のない部分を含んだものをアップしてしまってすみません。
(しかもTabは削除されるようで、Tabで区切ったトークンがくっついてしまっていま
した。投稿に直接記載する場合はスペース区切りにすべきですね。。。)

私よりすっきりしたマクロを見せていただき、ありがとうございます。ためしてみま
す。

[ ]
RE:00748 エラーダイアログ「RightLocal:No.00752
ひろ さん 99/09/21 14:55
 
 文さん今日は、ひろです。
 00746 の記事を読むと、macro を書き変えてもエラーが置きそうです
ね(^^;。まあ、あの様な書き方もあるということで許してください。

[ ]