複数文字列を検索するマクロNo.06641
jamhamstar さん 11/06/14 21:09
 
初めて質問します。以下の件でお手数をお掛けしますが、回答を宜しくお願いします。

複数の文字列を検索すること(ファイル読み込み時にエラーが発生したか文字列検索
するだけ)がたびたびあり、検索メニューからエラー文字(約20文字列)を検索し
ていましたが、秀丸のマクロをはじめて挑戦して以下のような簡単なソースを作成し
ました。しかし$Ee_eeのところで文字列がヒットするようにしても「検索は見つかり
ませんでした。」となってしまいます。検索のマクロをネットでいろいろ探しました
が(秀丸ヘルプの検索/置換文字列には上限があります。が少し引っかかりましたがよ
く理解できません。このへんでひっかかっているのか?)、grepでの利用はありまし
たが、マクロで情報がないかと探しましたがみつからないのでこちらでどなたか回答
をお願いしたいと投稿しました。お手数をお掛けしますが宜しくお願いします。

$aaa = "aaa";
$bb_b = "bb b";
$ccc = "ccc";
$dd_dd = "dd dd";
$Ee_ee = "Ee ee";
$Fffff = "Fffff";
$gggg = "gggg";
$hhhh = "hhhh";

question "検索するなら『はい(Y)』ボタンを押下ください";

if( result == yes ) {
 gofiletop //ファイルの先頭に移動
 searchdown $aaa;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $bb_b;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $ccc;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $dd_dd;
 if(result){beep;endmacro;

 gofiletop
 searchdown $Ee_ee;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $Fffff;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $gggg;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $hhhh;
 if(result){beep;endmacro;}

 }else{
  message "検索は見つかりませんでした。";
 }

}else{
 message "検索を中止しました。";
}
endmacro;

[ ]
RE:06641 複数文字列を検索するマクロNo.06642
山紫水明 さん 11/06/14 21:51
 
 jamhamstarさん,

{ }の対応と else の使い方に問題があるようです。
途中から以降次のようにしたらいかがでしょう。

if( result == yes ) {
 gofiletop //ファイルの先頭に移動
 searchdown $aaa;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $bb_b;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $ccc;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $dd_dd;
 if(result){beep;endmacro;}
 gofiletop
 searchdown $Ee_ee;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $Fffff;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $gggg;
 if(result){beep;endmacro;}

 gofiletop
 searchdown $hhhh;
 if(result){beep;endmacro;}

  message "検索は見つかりませんでした。";

}else{
 message "検索を中止しました。";
}
endmacro;

                          山紫水明(ユーザー)
                          SANSHISUIMEI

[ ]
RE:06641 複数文字列を検索するマクロNo.06643
秀まるお2 さん 11/06/14 21:56
 
 複数の文字列のどれか1つでもヒットするなら「beep」で音を鳴らし、見つか
らなければ「検索は見つかりませんでした。」を表示する、ということですよね。

 この場合は、まずは複数の文字列を順番に検索するよりも、正規表現を使って
一発で検索してしまう作戦がお勧めです。

 具体的には、例えば「aaa」と「bbb」のどちらにでもヒットするような検索を
するには、"aaa|bbb"という正規表現で検索すればいいです。

 今回の、

> $aaa = "aaa";
> $bb_b = "bb b";
> $ccc = "ccc";
> $dd_dd = "dd dd";
> $Ee_ee = "Ee ee";
> $Fffff = "Fffff";
> $gggg = "gggg";
> $hhhh = "hhhh";

 のどれにでもヒットするように正規表現を使って検索するとしたら、以下のよ
うになります。

  question "検索するなら『はい(Y)』ボタンを押下ください";
  if( result != yes ) {
      message "検索を中止しました。";
      endmacro;
  }
  gofiletop;
  searchdown2 "aaa|bb b|ccc|dd dd|Ee ee|Ffff|gggg|hhhh", regular, nocasesense;
  if( result ) {
      beep;
  } else {
      message "検索は見つかりませんでした。";
  }

 ちなみにですが、上記マクロは大文字/小文字の区別をしない指定になってま
して、例えば「AAA」にも「aaa」にもヒットします。大文字/小文字をちゃんと
区別して検索したい場合には、

  searchdown2 "aaa|bb b|ccc|dd dd|Ee ee|Ffff|gggg|hhhh", regular, casesense;

 のように書くのがいいです。

 正規表現については、秀丸の検索ダイアログボックスの中にある「ヘルプ」ボ
タンを押してヘルプページから参照出来るので、その辺も見てみて欲しいです。

[ ]
RE:06641 複数文字列を検索するマクロNo.06644
秀まるお2 さん 11/06/14 21:58
 
 あとついでに思ったんですが、

 gofiletop文も含めて、すべての文の最後にはセミコロン(;)が入ってないと
まずいと思います。(たまたまうまく動いてしまうようですけど)

[ ]
RE:06642 複数文字列を検索するマクロNo.06645
jamhamstar さん 11/06/14 23:14
 
山紫水明様
早速のご回答ありがとうございます。
ネストの件は20件の検索文字列があり上手く行かず
なれないマクロで間違っていたようです。
ご指摘ありがとうございました。

> jamhamstarさん,
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>                          SANSHISUIMEI

[ ]
RE:06644 複数文字列を検索するマクロNo.06646
jamhamstar さん 11/06/14 23:16
 
秀まるお2 様
早速のご回答ありがとうございます。
正規化表現のサンプルやミスなどのご指摘ありがとうございます。
参考にしてやり直してみます。

> あとついでに思ったんですが、
>
> gofiletop文も含めて、すべての文の最後にはセミコロン(;)が入ってないと
>まずいと思います。(たまたまうまく動いてしまうようですけど)

[ ]