GREP結果についてNo.16193
ももかず さん 03/12/19 10:00
 
こんちには、ももかずです。

現在GREPの結果は、
******************************
123.cpp(10): long aaa;
123.cpp(12): bbb = aaa;
123.cpp(13): ccc = aaa;
456.cpp(10): aaa = ddd;
456.cpp(12): aaa = 0;
******************************
のように表示されます。
これを、
******************************
123.cpp(10): long aaa;
123.cpp(12): bbb = aaa;
123.cpp(13): ccc = aaa;

456.cpp(10): aaa = ddd;
456.cpp(12): aaa = 0;
******************************
のように、ファイル名が異なったら改行がはいるように
ならないのでしょうか?
似たようなファイル名があった時に、このように改行が
はいってると、とても見易いのですが...

[ ]
RE:16193 GREP結果についてNo.16194
たけのこ さん 03/12/19 10:33
 
一般ユーザのたけのこです。

チョチョイとマクロを組んでみました。grep後に実行すると期待される結果にな
るかと……? getFileNameメソッドの中のsearchdownの引数を帰れば、grep結果
以外にも結果セットなテキストに使えるかも……。

gofiletop;
#isContinue = true;
while(#isContinue){
  call getFileName;
  $target = $$return;
  #nowline = lineno;
  movetolineno 1, #nowline + 1;
  if(#nowline != lineno){
    #isSame = true;
    while(#isSame){
      call getFileName;
      $dest = $$return;
      if($dest == $target){
        #nowline = lineno;
        movetolineno 1, #nowline + 1;
        if(#nowline == lineno){
          #isSame = false;
          #isContinue = false;
        }
      }else{
        #isSame = false;
        insert "\n";
      }
    }
  }else{
    #isContinue = false;
  }
}
backspace;
endmacro;
getFileName:
  golinetop;
  ##sx = x;
  ##sy = y;
  searchdown "\\([0-9]+\\):", regular;
  escape;
  $$file = gettext(##sx, ##sy, x, y);
  golinetop;
  return $$file;


(^^)/”

[ ]
RE:16193 GREP結果についてNo.16195
アルビレオ さん 03/12/19 11:00
 
秀丸ユーザーのアルビレオです。

>のように、ファイル名が異なったら改行がはいるように
>ならないのでしょうか?
>似たようなファイル名があった時に、このように改行が
>はいってると、とても見易いのですが...

grepのような出力は人間だけでなくプログラムなどからも利用しやすいように、
あまり整形などはされません。これはUNIX由来の伝統です。
たとえば「複数ファイルの一括置換」のようにgrepの出力を利用するマクロは
途中に空行がないことを前提に作られているので正しく動作しなくなります。

見やすいようにしたいなら、grepの出力をマクロで加工したほうがいいでしょう。

  disabledraw;
  gofiletop;
loop0:
  searchdown "\\([0-9]+\\):",regular;
  if(!result) endmacro;
  escape;
  $fname = gettext(0,y,x,y);//比較対象のファイル名取得
loop1:
  #oldy=lineno;
  movetolineno 1,lineno+1;
  if(lineno!=#oldy+1) endmacro;
  searchdown "\\([0-9]+\\):",regular;//次のファイル名を探す
  if(!result) endmacro;
  escape;
  if($fname==gettext(0,y,x,y)){//ファイル名を比較
    goto loop1;
  }
  golinetop2;
  insert "\n";//改行を挿入
  goto loop0;

と、書いてるうちにたかのこさんからもマクロが(^^;

[ ]
RE:16194 GREP結果についてNo.16196
ももかず さん 03/12/19 11:31
 
たけのこさん、アルビレオさん、こんにちは。ももかずです。

お返事ありがとうございます。

マクロで加工するとファイルが更新されますので、grep結果を
閉じる時に必ず保存するか聞かれてしまいます。
1、2つのgrepであれば、特に気にはならないんですが、複数の
結果があると、いちいち破棄終了しないといけないので、気に
なってしまいます。できれば出力結果そのものに区切りが入る
とよいかなと思います。

たけのこさんのマクロに手を加えたら、保存以外は望みどおり
になりましたので、使わせてもらおうと思います。
(そのままだと検索バッファが変わってしまってたので、元に
 戻す処理を追加しただけです...)

[ ]
RE:16196 GREP結果についてNo.16197
Arimac さん 03/12/19 12:01
 
マクロの最後で
clearupdated;
をするとか・・・

[ ]
RE:16197 GREP結果についてNo.16198
ももかず さん 03/12/19 13:27
 
Arimacさん、こんにちは。ももかずです。

>マクロの最後で
>clearupdated;
>をするとか・・・

これ、いいですね。
「filetypeがgrepだったら」って付け加えれば、grep以外は更新しない
から、ばっちりです。

ありがとうございます。

[ ]