localgrepをicon付きで使うとおかしな現象No.04526
かよ さん 04/11/13 20:27
 
localgrepをicon付きで使うとおかしな現象が起きることがある

 grep文実行後のresultについてはヘルプに以下のような記述があります。
「resultには見つかった個数が入ります。途中で中断された場合はresultは-1になり
ます。」
 localgrep文でもgrep文と同様に、見つかった個数が入るのであればそれを利用し
たいと思っていたのですが、そのようにはなっていないようです。
 あるファイル(論理行数が5287、「秀丸」を含んだ行が220)を対象ファイルとし
て、以下のようなマクロで実験してみました。
//----------------------------------------
 //localgrep "秀丸", noregular, nocasesense;//◆(A)
 localgrep "秀丸", noregular, nocasesense, icon;//◆(B)
 #r = result;
 if ( #r == -1 ) {
  message "localgrep が中断されました。";
  endmacro;
 }
 gofileend;
 message "result = " + str(#r)
  + "  ヒット行数 = " + str(lineno - 1);
 endmacro;
//----------------------------------------
◆(A)のように、icon なしで実行した場合のmessage文の内容は以下の通りでした。
正常終了した場合、「result = 1  ヒット行数 = 220」
強制中断した場合、「result = 1  ヒット行数 = 57」
 正常に終了しても、途中で中断しても、result = 1 になり、正常に終わった場合
も見つかった個数は入らないようです。

◆(B)のように icon をつけて実行すると、おかしな現象が起きる場合があります。
 正常に終了して「result = 1  ヒット行数 = 220」のメッセージが出るときもあ
りますが、〈結果ファイルは出ているのに、いつまでたってもメッセージが出てこな
い〉ことがあります。(半々ずつぐらいです。)
 メッセージが出てこない場合、いろいろやってみた状況を記します。

@ 結果ファイルにおいて適当な行を選んでタグジャンプを指示するとすると、「re
sult = 1  ヒット行数 = 220」が出てきます。(タグジャンプはされません。)

A 結果ファイルの「閉じるボタン[×]」をクリックすると、「result = 0  ヒ
ット行数 = 5286」というメッセージが出てきます。「5286」というのは、実験に使
ったファイルの行数マイナス1です。

B 対象ファイルに戻るために、そのファイルのウィンドウをクリックすると、「re
sult = 1  ヒット行数 = 220」が出てくることもあれば、「マクロの実行を中断し
ますか?」ときいてきて、「はい」で答えると、「result = 0  ヒット行数 = 528
6」が出てくることもあります。「他の秀丸がマクロ実行中です」が出てくることも
あります。

 @〜B以外の状況も発生します。

 localgrep を icon 付きで使いたいと思っていますが、このように動作が一定せず、
戸惑っています。この辺の事情なり、上記マクロの不備なりを指摘していただければ
ありがたく思います。
なお、OSは、Windows Me で、秀丸は V. 4.14 です。

[ ]
RE:04526 localgrepをicon付きで使うとおNo.04529
Iranoan さん 04/11/14 14:02
 
 かよさん今日は、Iranoan です。
>  localgrep文でもgrep文と同様に、見つかった個数が入るのであればそれを利用し
> たいと思っていたのですが、そのようにはなっていないようです。
 その通りで、現在は localgrep では result の値が変化しません。直前に
行った result の値を変化させる文を実行した時の値がそのまま残っています。
→HIDESOFT/2/956 1998/4/30

 もし個数が知りたければ、実行後に lineno - 1 で解ります。

[ ]
RE:04529 localgrepをicon付きで使うとおNo.04530
かよ さん 04/11/14 23:44
 
 Iranoan さん、こんばんは。かよです。

> その通りで、現在は localgrep では result の値が変化しません。直前に
>行った result の値を変化させる文を実行した時の値がそのまま残っています。

 了解しました。

>→HIDESOFT/2/956 1998/4/30

 過去ログの番号だと思い、さがしてみましたが、不慣れなせいで、見つける
ことができませんでした。(他のlocalgrep関連の記事がいくつか見つかり、
参考になりました。)こんど、時間のあるとき、いろいろ検索してさがして
みるつもりです。
 回答、ありがとうございました。

[ ]