教えてくださいNo.03795
なむnomoto さん 03/06/30 20:03
 
  すみません、教えてください。
                       なむnomoto

 下記のマクロで、3)と4)がメニュー選択で実行されません。
 { } の数はエラーがでないので、矛盾がないようです。
 3) を選択すると、find の検索ダイアログが出ます。
 4) を選択しても、find の検索ダイアログが出ます。
 findコマンドは1つも使用してないので、不思議です。
 
 3)と4)の else if(#m == 3)  else if(#m == 4)のブロックを
 else if(#m == 1) の前に移動すると、正常に反応します。
 
 すると、1) 2) の内容に原因があって、3)と4)の起動を阻害してる
 見たいですが、{ } のブロック外に影響して else if を阻害することが
 あるのは何か解るでしょうか?
 1) 2) のブロックはちょっと大きいので、例出を遠慮しました(^^;)
 
// -------------------------<
 menu "1) AAAA",
      "2) BBBB",
      "3) Grepdialog",
      "4) キャンセル終了";
        #m = result;
   if(!#m) { endmacro;  }
   else if(#m == 1) {
   }
   else if(#m == 2) {
   }
   else if(#m == 3) {grepdialog ; endmacro;}
   else if(#m == 4) { message "終了します";  quit;  }



[ ]
RE:03795 教えてくださいNo.03796
tnobu2 さん 03/06/30 20:50
 
>  すみません、教えてください。
>                       なむnomoto
>
> 下記のマクロで、3)と4)がメニュー選択で実行されません。
> { } の数はエラーがでないので、矛盾がないようです。
> 3) を選択すると、find の検索ダイアログが出ます。
> 4) を選択しても、find の検索ダイアログが出ます。
> findコマンドは1つも使用してないので、不思議です。

例示された1,2の省略されたマクロを4.00β5でそのまま実行すると
ちゃんと3,4は動作するようです。
使われたバージョンは何でしょうか?

もしバージョンに関係なく同じ結果であるならば、1,2の中身に何か
問題があるんだと思います。
マクロ自体に問題があるのか、秀丸自体のマクロの解釈に問題があるの
かはここに書かれた内容ではわかりませんが。


> 
> 3)と4)の else if(#m == 3)  else if(#m == 4)のブロックを
> else if(#m == 1) の前に移動すると、正常に反応します。
> 
> すると、1) 2) の内容に原因があって、3)と4)の起動を阻害してる
> 見たいですが、{ } のブロック外に影響して else if を阻害することが
> あるのは何か解るでしょうか?
> 1) 2) のブロックはちょっと大きいので、例出を遠慮しました(^^;)
> 
>// -------------------------<
> menu "1) AAAA",
>      "2) BBBB",
>      "3) Grepdialog",
>      "4) キャンセル終了";
>        #m = result;
>   if(!#m) { endmacro;  }
>   else if(#m == 1) {
>   }
>   else if(#m == 2) {
>   }
>   else if(#m == 3) {grepdialog ; endmacro;}
>   else if(#m == 4) { message "終了します";  quit;  }
>
>

[ ]
RE:03796 教えてくださいNo.03797
なむnomoto さん 03/06/30 21:15
 
 tnobu2さん

>例示された1,2の省略されたマクロを4.00β5でそのまま実行すると
>ちゃんと3,4は動作するようです。
>使われたバージョンは何でしょうか?

  そうなんです。
  1) 2) の内容に関係するらしいです。

  使った「秀丸」エディタは、V3.19
    Win2000 です。
           書いておかねばイケマセンでした。


>もしバージョンに関係なく同じ結果であるならば、1,2の中身に何か
>問題があるんだと思います。
>マクロ自体に問題があるのか、秀丸自体のマクロの解釈に問題があるの
>かはここに書かれた内容ではわかりませんが。

  そうですか。前例があるのかと思ったりしましたが・・・
    

[ ]
RE:03797 教えてくださいNo.03799
tnobu2 さん 03/07/01 15:36
 
>>マクロ自体に問題があるのか、秀丸自体のマクロの解釈に問題があるの
>>かはここに書かれた内容ではわかりませんが。
>
>  そうですか。前例があるのかと思ったりしましたが・・・
>    

他にコメントが付かないようなので、やはり前例のようなものはなくて、
実際に中身を見ないと何とも言えないというところではないでしょうか。

もしマクロの中身を書き込みにくいということであれば、とりあえず問題
となっているifの処理を{}から出して、サブルーチンかgoto文で呼び出す
ようにすると問題の切り分けができるんではないでしょうか?

[ ]
RE:03799 教えてくださいNo.03800
なむnomoto さん 03/07/01 19:59
 

>他にコメントが付かないようなので、やはり前例のようなものはなくて、
>実際に中身を見ないと何とも言えないというところではないでしょうか。

  tnobu2さん有り難うございます。そのようですね。

>もしマクロの中身を書き込みにくいということであれば、とりあえず問題
>となっているifの処理を{}から出して、サブルーチンかgoto文で呼び出す
>ようにすると問題の切り分けができるんではないでしょうか?

 マクロの、else ifブロックごとに切り出して実行確認して見ました。
 問題がないので、???
 んで、不具合の場合に、{grep}ダイアログでなくfind ダイアログが出るのが解り
ません。
 呼びもしないのにfind ダイアログが出るのはなんでか解るでしょうか?

 if(!#m) endmacro;
  を 
 if(!#m) {endmacro;}
  としたり、あれこれやってる内に、期待通りに動くようになってしまいました。
  あれれ? ????  まあ良いかという事で、今は一段落しています。
  お騒がせしました。 問題が何なのか解らないままですけど(+_+)


[ ]
RE:03800 教えてくださいNo.03801
アルビレオ さん 03/07/01 20:49
 
アルビレオです。

> マクロの、else ifブロックごとに切り出して実行確認して見ました。
> 問題がないので、???
> んで、不具合の場合に、{grep}ダイアログでなくfind ダイアログが出るのが解り
>ません。
> 呼びもしないのにfind ダイアログが出るのはなんでか解るでしょうか?
>
> if(!#m) endmacro;
>  を 
> if(!#m) {endmacro;}
>  としたり、あれこれやってる内に、期待通りに動くようになってしまいました。
>  あれれ? ????  まあ良いかという事で、今は一段落しています。
>  お騒がせしました。 問題が何なのか解らないままですけど(+_+)

他のブロックではfindを使っているところもあるんですよね?
たぶん非常にわかりにくいところに構文上のミスがあったのだと思います。

1) のブロックを空にしたもの、2) のブロックを空にしたものをテストして、ど
ちらに問題があるのか調べた方が…と思ったのですが、直ってしまったというこ
となので原因を探すのは難しくなりましたね。
意図したとおりに動いているならそれでよしですが。

[ ]
RE:03801 教えてくださいNo.03818
なむnomoto さん 03/07/05 03:32
 
 なむnomotoです

 アルビレオさんコメント有り難うございます。

>> 呼びもしないのにfind ダイアログが出るのはなんでか解るでしょうか?

>他のブロックではfindを使っているところもあるんですよね?

  いや、使っていないのです。それで奇妙です。

>たぶん非常にわかりにくいところに構文上のミスがあったのだと思います。
>
>1) のブロックを空にしたもの、2) のブロックを空にしたものをテストして、ど
>ちらに問題があるのか調べた方が…と思ったのですが、直ってしまったというこ

  一応、期待通りの動きをしています。
  「ブッロクを空にしたもの」を実行するのは気が付きませんでした。
  今度はやってみます。
  2) でGrepのブロック
  3) で 別のGrepのブロック
  などして、どれかが微妙に矛盾があった場合などに find が出ます。
  後にも前にもどこにもマクロではfindは使っていないのです。
  grepが上手くゆかない場合には、findダイアログが出る仕様なのでしょうか?

[ ]
RE:03818 教えてくださいNo.03819
アルビレオ さん 03/07/05 04:54
 
アルビレオです。

> 2) でGrepのブロック
> 3) で 別のGrepのブロック
> などして、どれかが微妙に矛盾があった場合などに find が出ます。
> 後にも前にもどこにもマクロではfindは使っていないのです。
> grepが上手くゆかない場合には、findダイアログが出る仕様なのでしょうか?

だとしたら、秀丸側のバグの可能性も高いですね。
たとえばマクロの文法チェックには引っかからない異常なパラメータを渡してし
まったらそういう動作をするとか。

おかしな動作を起こす最小限のマクロを絞り込めたら非常に見つけにくいバグを
潰せたかもしれませんが、もう再現できないんですよね…チャンスを逃したかも。

[ ]
RE:03819 教えてくださいNo.03820
ひろ さん 03/07/05 16:09
 
 なむnomoto さん今日は、ひろです。
> > grepが上手くゆかない場合には、findダイアログが出る仕様なのでしょうか?
 grep はでませんが、検索文字列が空だと findup/down(2) では出ます。
 何の為お聞きしますが、これらの文を使っているという事は?

[ ]
RE:03820 教えてくださいNo.03822
なむnomoto さん 03/07/08 19:53
 
  ひろさん、お世話さまです
               遅くなりました。なむnomotoです。

> grep はでませんが、検索文字列が空だと findup/down(2) では出ます。
> 何の為お聞きしますが、これらの文を使っているという事は?

 ええと確認しました。
 searchdown2 $search, regular, fuzzy;
 を使っていました。・・・・・・・・・・・申し訳ない。

 grep $search ,$file ,$dir ,regular ,fuzzy ,icon;
  が巧く作動しない場合に、次のブロックの
 searchdown2 ・・・・ が作動して、「検索ダイアログ」が出ています。
 findだけじゃ無かったんですね。・・無知-->>>>自分(^^;)

 スミマセンでした。

[ ]