マクロによる単語の取得(強調表示)No.24588
jika さん 08/03/05 15:29
 
教えて下さい。

質問
 マクロにて単語を順次取得したいのですが、
 どうすれば行えるのでしょうか

<状態>
 1.ファイル(画面)イメージ

       12345678901234567890
   0001aaaa bbbb[CRLF]
   0002[EOF]

 2. 秀丸エディタ Ver7.07

<実行マクロ>
  1.escape;
  2.gofiletop;
  3.golinetop2;
  4.setsearch "(^.+ )|( .+)", 0x2A12 ;
  5.gettext(foundtopx,foundtopy,foundendx-1,foundendy);
  6.finddown;
  7.gettext(foundtopx+1,foundtopy,foundendx,foundendy);

<期待値>
   "aaaa"・・・5行目
   "bbbb"・・・7行目

<実行結果>>
  上記マクロを実行すると"bbbb"を2回取得します。

 どうすれば"aaaa","bbbb"を取得できるのでしょうか


<その他>
 エディタの"検索"で(^.+ )|( .+)正規表現検索を行うと
 "aaaa "は強調表示されますが、" bbbb"は強調表示
 されませんが、検索(ヒット)されます。



[ ]
RE:24588 マクロによる単語の取得(強調表No.24589
秀丸担当 さん 08/03/05 16:03
 

><実行結果>>
>  上記マクロを実行すると"bbbb"を2回取得します。
>
> どうすれば"aaaa","bbbb"を取得できるのでしょうか

finddownはカーソル位置の次から検索するので、finddown2にするといいかもし
れません。
gettextをした後に、
moveto foundendx,foundendy;
というような感じでヒットした文字列の最後に移動しておくと同じ文字列にヒッ
トしなくなるかと。
"(^.+ )|( .+)"だと空白が重複するので、空白で区切るのであれば以下のように
してみてはどうでしょうか。

setsearch "[^ \n]+", 0x2A12 ;
while(1){
  finddown2;
  if(result==false)break;
  question "\""+gettext(foundtopx,foundtopy,foundendx,foundendy)+"\"";
  if(result==false)break;
  moveto foundendx,foundendy;
}


><その他>
> エディタの"検索"で(^.+ )|( .+)正規表現検索を行うと
> "aaaa "は強調表示されますが、" bbbb"は強調表示
> されませんが、検索(ヒット)されます。

強調表示の場合は、重なり合う部分がある場合は最初にヒットしたほうを優先し
て強調表示しているので、こうなってしまっています。

[ ]
RE:24589 マクロによる単語の取得(強調表No.24590
jika さん 08/03/05 17:14
 
早速のコメントありがとうございます。

勉強不足でした。

教えて頂いた通り
 [^ \n]、moveto foundendx,foundendy;
を利用しマクロを修正し、強調表示も同様に
 [^ \n]
で解決しました。

ありがとうございました。

[ ]