Grep連続検索の方法についてNo.05885
まいんぐ さん 08/08/23 08:08
 
最近、grep機能を多用しております。初心者です。
以下のことをご教授お願いできますでしょうか?

 ある文書に含まれる単語Aをgrep検索後、ヒットできれば、それに適当な名前をつ
けて保存します。
それをテキストAとします。
 次に、テキストAから一気に単語a、単語bを含む文書をそれぞれ別画面に表示でき
る連続grepマクロを探しております。

一度に表示できるgrep
テキストA→(A,a)、(A,b)、(A、他の単語など)

よろしくお願いいたします。

[ ]
RE:05885 Grep連続検索の方法についてNo.05886
秀丸担当 さん 08/08/25 10:35
 

>最近、grep機能を多用しております。初心者です。
>以下のことをご教授お願いできますでしょうか?
>
> ある文書に含まれる単語Aをgrep検索後、ヒットできれば、それに適当な名前をつ
>けて保存します。
>それをテキストAとします。
> 次に、テキストAから一気に単語a、単語bを含む文書をそれぞれ別画面に表示でき
>る連続grepマクロを探しております。
>
>一度に表示できるgrep
>テキストA→(A,a)、(A,b)、(A、他の単語など)
>
>よろしくお願いいたします。

適当な名前を付けて保存するのはgrep対象とするためだと思いますが、grepダイ
アログで検索するファイルを「(現在の内容)」にすると、保存しなくてもそもま
まgrepして絞り込むこともできます。
マクロにすると localgrep 文という文になります。
例えば、以下のような感じでどうでしょうか。

localgrep "A",casesense;
clearupdated;
#h=hidemaruhandle(0);
localgrep "a",casesense;
setactivehidemaru(#h);
localgrep "b",casesense;


文字列が固定ではなく入力する場合は以下のような感じにします。
$a=input("入力してください");
localgrep $a,casesense;

一番最初の対象ファイルが現在開いているファイルではなく、複数のファイルや
固定のファイルの場合はgrep文を使います。

grep "A", "test.txt", "c:\\folder\\", casesense;

マクロヘルプも参考にしてみてください。

[ ]
RE:05886 Grep連続検索の方法についてNo.05887
まいんぐ さん 08/08/25 19:55
 
秀丸担当様
早速のご回答ありがとうございました。
マクロヘルプ等を参考にさせていただきました。
まだ、初心者なので全然理解できません。勉強致します。

誠に失礼なのですが、あと一回質問させていただきますでしょうか?

 実は一度に100個くらいの単語を一度にgrepしたかったのです。先のマクロに目
的の単語をその都度100個書けばいいのですが。
 例えば、ある文書から抽出したい単語のリストを別の文書に作成しておいて、ある
文書から一気に100回のgrepができないものかと思っていました。
 

[ ]
RE:05887 Grep連続検索の方法についてNo.05888
秀丸担当 さん 08/08/26 13:41
 

> 実は一度に100個くらいの単語を一度にgrepしたかったのです。先のマクロに目
>的の単語をその都度100個書けばいいのですが。
> 例えば、ある文書から抽出したい単語のリストを別の文書に作成しておいて、ある
>文書から一気に100回のgrepができないものかと思っていました。

先に書いたサンプルのマクロを100行ぶん書いてしまうと、100個の秀丸エ
ディタが起動して、場合によってはメモリ不足が発生しやすい状況になるかもし
れないので、それは避けたほうがいいです。

できれば、ウィンドウは少なくなるようなマクロにしたほうがいいと思います。


例えば、

一行ごとに単語を100行書いたファイル
  C:\フォルダ\単語リスト.txt

対象のテキスト
  C:\フォルダ\対象テキスト.txt

結果を出力するファイル
  C:\フォルダ\結果テキスト.txt

となるようにするには、以下のようなマクロににします。
closenew;を使って秀丸エディタが増えないようにしているところがポイントで
す。少し難しいかもしれないですが。


$output = "c:\\フォルダ\\結果テキスト.txt";
openfile "c:\\フォルダ\\単語リスト.txt";
selectall;
copy;
closenew;
beginclipboardread;
#fFirst=true;
while( 1 ) {
  $s = getclipboard;
  if(rightstr($s,1)=="\x0a")$s=leftstr($s,strlen($s)-1);
  if($s=="")break;
  grep $s, "対象テキスト.txt", "c:\\フォルダ", casesense;
  if(#fFirst) {
    #fFirst=false;
    saveas $output;
  } else {
    appendsave $output;
  }
  closenew;
}
openfile $output;
endmacro;

[ ]
RE:05888 Grep連続検索の方法についてNo.05889
まいんぐ さん 08/08/26 22:11
 
秀丸担当様
 マクロを作っていただいて、ありがとうございました。ほぼ、希望していたマクロ
でした。一度に100個の単語のgrepできました。
 自力で書けるようヘルプなど活用していきたいと思います。
 どうもありがとうございました。

[ ]