検索のヒット範囲がおかしいNo.02390
Iranoan さん 09/04/03 00:00
 
 秀丸担当さん今日は、Iranoan です。
//------------------------------------------------------------
setcompatiblemode 0x0200;
gofiletop;
insertfix "AAAAAAAAAAAA\n";
setsearch "[A-Za-z]+", 0x10;
finddown2;
//若しくは searchdown2 "[A-Za-z]+", regular;
//------------------------------------------------------------
は問題無いです。しかし
//------------------------------------------------------------
setcompatiblemode 0x0200;
gofiletop;
insert "AAAAAAAAAAAA\n";
movetolineno 5, 1;
searchdown2 "[A-Za-z]+", regular;
##endx = foundendx;
##endy = foundendy;
while( 1 ){
  findup;
  if(
    ##endx != foundendx || ##endy != foundendy ||//範囲が変わった
    ( foundtopx == 0 && foundtopy == 0 )//ファイル先頭
  )break;
}
finddown2;//若しくは searchdown2 "[A-Za-z]+", regular;
message str( foundtopx );
message str( seltopx );
//------------------------------------------------------------
の結果がおかしいです。
//------------------------------------------------------------
setcompatiblemode 0x0100;
//------------------------------------------------------------
とした時の foundtopx は問題ありません。
 こちらの環境は、WindowsXP+IE7.0+秀丸 Ver.7.11b02 です。

[ ]
RE:02390 検索のヒット範囲がおかしいNo.02393
秀丸担当 さん 09/04/03 10:08
 

setcompatiblemode 0x0200;
のときは、2つメッセージは 1 と 1 が表示されました。

setcompatiblemode 0x0100;
のときも、2つメッセージは 1 と 1 が表示されました。

おそらくこの値が、setcompatiblemode が 0x0200 か 0x0100 によって違うとい
う意味のご報告なのではないかと思いましたが、そうだとしたら、再現すること
はできませんでした。
そういう意味のご報告でないとしたら、どこが問題なのか教えていただけると何
かしらの回答ができるかもしれません。

[ ]
RE:02393 検索のヒット範囲がおかしいNo.02395
Iranoan さん 09/04/03 13:02
 
 秀丸担当さん今日は、Iranoan です。
> おそらくこの値が、setcompatiblemode が 0x0200 か 0x0100 によって違うとい
> う意味のご報告なのではないかと思いましたが、そうだとしたら、再現すること
> はできませんでした。
 すいません。
 私が勘違いっている部分がありました。
> setcompatiblemode 0x0100;
> //------------------------------------------------------------
> とした時の foundtopx は問題ありません。
です。そして
・条件と関係なく、foundtopx == 0 が正しいのではないか?
・> setcompatiblemode 0x0200;
  の時は、seltopx も 0 では無いか?
が投稿の趣旨でした。

>     ##endx != foundendx || ##endy != foundendy ||//範囲が変わった
>     ( foundtopx == 0 && foundtopy == 0 )//ファイル先頭
のどちらの条件で、while 文を抜けても finddown2 文を使っているので、
ファイル先頭の文字もヒットするだろう、と。

 なお元々作成しているマクロがバグっていて、それを直す過程で気が付いた
のですが、
>     ( foundtopx == 0 && foundtopy == 0 )//ファイル先頭

    ( !result )
とすると、期待通りの foundtopx == 0 になります。

[ ]
RE:02395 検索のヒット範囲がおかしいNo.02398
秀丸担当 さん 09/04/03 14:12
 

>・条件と関係なく、foundtopx == 0 が正しいのではないか?
>・> setcompatiblemode 0x0200;
>  の時は、seltopx も 0 では無いか?
>が投稿の趣旨でした。

そうでしたか。
カーソルが検索文字列で点滅している状態、または範囲選択でも検索中の状態で
は、fidndown2はその場所ではヒットせず、次の場所でヒットするようになりま
す。
そうでないと、finddown2はいつまでもカーソルが進まないことになってしまい
ます。
!resultとしたときは、これ以上ヒットする文字が無く、検索中の状態ではなく
なっているためだと思います。

[ ]
RE:02398 検索のヒット範囲がおかしいNo.02399
Iranoan さん 09/04/03 15:31
 
 秀丸担当さん今日は、Iranoan です。
> 検索中の状態で
> は、fidndown2はその場所ではヒットせず、次の場所でヒットするようになりま
> す。
 マクロではなく、上下検索をメニューから行って始めて解りました。
> while( 1 ){
>   findup;
>   if(
>     ##endx != foundendx || ##endy != foundendy ||//範囲が変わった
>     ( foundtopx == 0 && foundtopy == 0 )//ファイル先頭
>   )break;
> }
なら finddown2 の前に、検索を中断していると思ったのですが、break は検
索を中断した扱いにはならないんですね。あくまでカーソル移動等の処理する
必要があると。

[ ]