grep結果をフルパスで表示したいNo.03471
inuk さん 02/10/17 19:33
 
 皆さま、鶴亀でもお世話になっておりますinukと申します。

マクロで実行したgrep結果をフルパス表示したいのですが、どのようにすればいいの
か分かりません。
どなたかご教示ください。お願いします。

実行したマクロ↓
        $keyword = "オプション";
        $file = "*.txt";
        $dir = "D:\\stock";
    grep $keyword,$file,$dir,regular,fuzzy,subdir,icon;

上記マクロを実行して得られる結果
"y2kw95.txt(50): インストール オプション"

本当に欲しい結果
"D:\stock\y2kw95.txt(50): インストール オプション"
 ~~~~~~~~~

[ ]
RE:03471 grep結果をフルパスで表示したいNo.03472
きいろいまふらあ さん 02/10/17 22:47
 
なんでマクロコマンドのgrepにフルパス出力のオプションがないんだろう?って
とこだと思いますが、とりあえず暫定的な対処としては

>        $keyword = "オプション";
>        $file = "*.txt";
>        $dir = "D:\\stock";
>    grep $keyword,$file,$dir,regular,fuzzy,subdir,icon;
の後に、
replaceallfast "^", $dir + "\\", regular;
を付けることで凌げないでしょうか?

…っと思ったのですが、
$dir = "D:\\tsock";
とか
$dir = "D:\\ntock";
とかだとうまくいかないですね。
いろいろ工夫が必要ですね。

[ ]
RE:03471 grep結果をフルパスで表示したいNo.03473
ひろ さん 02/10/17 23:54
 
 inuk さん今日は、ひろです。
> マクロで実行したgrep結果をフルパス表示したいのですが、どのようにすればいいの
> か分かりません。
 こちらに関して要望はでていますが、フルパス出力のオプションはありません。
 現状では、下記の要領で良いでしょう。
grep $str, $file, $directory;
call ChangeCharacter directory2, "\\", "\\\\";
replaceallfast "^",$$return + "\\\\", regular;
gofiletop;
endmacro;

ChangeCharacter://buff 中の文字列を置換
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:03472 grep結果をフルパスで表示したいNo.03474
encodingshiftjis さん 02/10/18 00:51
 
>いろいろ工夫が必要ですね。

正規表現メタ文字のエスケープに向かったのはできたみたいですが

,regular を使わず キー操作の再生の方向でもできるでしょう。

  $keyword = "オプション";
    $file = "*.txt";
    $dir = "D:\\stock";
  grep $keyword,$file,$dir,regular,fuzzy,subdir,icon;

gofiletop;
while(1){
insert $dir+"\\";  // パス追加
golineend2;right; // 次行頭に移動
   if(!result)break; }    

[ ]
RE:03472 grep結果をフルパスで表示したいNo.03475
きいろいまふらあ さん 02/10/18 02:16
 
>>        $keyword = "オプション";
>>        $file = "*.txt";
>>        $dir = "D:\\stock";
>>    grep $keyword,$file,$dir,regular,fuzzy,subdir,icon;
>の後に、
>replaceallfast "^", $dir + "\\", regular;
>を付けることで凌げないでしょうか?

よくよく考えるとこれ↑だめです。

と思っている間に有用なレスがencodingshiftjisさん、ひろさんからついてまし
た。ということでそちらを参照下さい。(^^;

#検索文字列と置換文字列に対して独立に正規表現のON/OFFができないの
#はなんでなんだろう?と負け惜しみ。:-p

[ ]
RE:03473 grep結果をフルパスで表示したいNo.03476
inuk さん 02/10/18 11:22
 
 きいろいまふらあ さん、encodingshiftjis さん、ひろ さん、素早い回答有難う
御座います。

きいろいまふらあ さん案→"\"が抜けてしまいNGでした。
ひろ さん案→ばっちりOKでした。
encodingshiftjis さん案→1つ目はOKなのですが、複数ある場合NGでした。

そこで以下の様に仕様を変えさせて頂いたら成功しました。
gofiletop;
while(code!=eof){   // 変更させてもらいました
insert $dir+"\\";
golineend2;moveto 0,y+1; // 変更させてもらいました
    if(!result)break; }

えーと、ひろ さんに提案頂いたのは僕にはオーバースキルで、なんとなくしか理解
出来てませんが、ただ、ひろ さん案の方が処理早いようなのでこちらを使わせて頂
きます。
皆さん有難う御座いました。

※フルパス出力のオプション出る事を望みます。ってのは別の会議室でしょうね。

[ ]