grepの結果にもう一度grepを実行するマクNo.15394
恭平 さん 03/09/18 12:04
 
教えてください。
たとえば、グレップをしたファイルのうち、
http:と.htmといった二つの文字列を含む部分をもう一度
グレップする場合のマクロみたいなものはあるんでしょうか。
宜しくお願いします。



[ ]
RE:15394 grepの結果にもう一度grepを実行No.15395
Iranoan さん 03/09/18 12:35
 
 恭平さん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
> たとえば、グレップをしたファイルのうち、
> http:と.htmといった二つの文字列を含む部分をもう一度
> グレップする場合のマクロみたいなものはあるんでしょうか。
 一応絞り込み機能を持たせた拙作のマクロがあります。しかし恭平さんのや
りたいことなら、マクロを使わなくても、「検索するファイル」で「(現在の
内容)」を選べばよいと思います。

[ ]
RE:15395 grepの結果にもう一度grepを実行No.15396
恭平 さん 03/09/18 12:51
 
Iranoanさん、コメントありがとうございます。
二つの文字列は「|」で区切ればいいのでしょうか。
あともう一つ教えてください。
たとえば、http:と.htmで検索した結果、
同じ文字列が重複して表示されます。
こういう場合には、一つだけにすることはできるでしょうか。
恭平


> 恭平さん今日は、Iranoan です。
> 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
>> たとえば、グレップをしたファイルのうち、
>> http:と.htmといった二つの文字列を含む部分をもう一度
>> グレップする場合のマクロみたいなものはあるんでしょうか。
> 一応絞り込み機能を持たせた拙作のマクロがあります。しかし恭平さんのや
>りたいことなら、マクロを使わなくても、「検索するファイル」で「(現在の
>内容)」を選べばよいと思います。

[ ]
RE:15396 grepの結果にもう一度grepを実行No.15397
恭平 さん 03/09/18 12:53
 
追加します。

>同じ文字列が重複して表示されます。
>こういう場合には、一つだけにすることはできるでしょうか。

具体的にはhttpとhtmではさまれたURLが重複するのです。

[ ]
RE:15397 grepの結果にもう一度grepを実行No.15398
Iranoan さん 03/09/18 13:17
 
 恭平さん今日は、Iranoan です。
> 具体的にはhttpとhtmではさまれたURLが重複するのです。
 何だか、
> http:と.htmといった二つの文字列を含む部分をもう一度
の部分を含め、私が誤解している気がするので、恭平さんのやった作業を、
grep 実行時のオプションを含め何も省略せず、最初から順に一度書いてくだ
さい。

[ ]
RE:15398 grepの結果にもう一度grepを実行No.15399
恭平 さん 03/09/18 14:23
 
>恭平さんのやった作業を、
>grep 実行時のオプションを含め何も省略せず、最初から順に一度書いてください。

分かりにくくてすみません。
まず、web巡回ソフトを使っていくつかのデータを収集しました。
これに、「障害者」というキーワードでグレップを実行しました。
このファイルには、下記のようなデータが含まれていました。

373news.com\2000picup\2003\08\picup_20030818_9.htm(105):                 <td
><img src="http://373news.com/373img/button-s.gif" width="10" height="10">&n
bsp;<a href="picup_20030818_4.htm" class="font12">障害者施策に市民が提言 鹿
児島市でシンポ</a></td>
373news.com\2000picup\2003\09\picup_20030909.htm(74):        <a href="http:/
/373news.com/2000picup/2003/09/picup_20030909_2.htm" >次期障害者プラン 地域
での生活重視/鹿県素案</a>

このうち、http://.....htmの部分だけがほしいので、試しに、
a href="http: を入れてグレップを実行したら、同じURLのものが沢山出てきたとい
う次第です。ほんとは一つだけでいいのです。
以上ですが、よろしいでしょうか。










[ ]
RE:15399 grepの結果にもう一度grepを実行No.15400
恭平 さん 03/09/18 14:24
 
すみません。追加します。

>このうち、http://.....htmの部分だけがほしいので、試しに、
>a href="http: を入れてグレップを実行したら、同じURLのものが沢山出てきたと
>いう次第です。ほんとは一つだけでいいのです。
>以上ですが、よろしいでしょうか。

このグレップの場合は、「現在の内容」を選択しました。

[ ]
RE:15400 grepの結果にもう一度grepを実行No.15401
Iranoan さん 03/09/18 17:52
 
 恭平さん今日は、Iranoan です。
> このうち、http://.....htmの部分だけがほしいので、試しに、
 やはり聞いて良かったです。私の想像と全く違っていました。http:// が書
かれた行を出力 (grep の機能) したいのではなく、http:// の部分だけを取
り出し、いわばリンク集を作りたいわけですね。
 それなら末技のマクロで、grep の結果とは限らず、http:// ではじまる
URL を取り出せると思います。
//-------------------------------------------------------------------
//検索状態を保持
#reg_search = searchmode;
$search = searchbuffer;
#search = searchoption;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
writeregnum "SelectFound",1;
envchanged;
closereg;
//URL の取り出し
disabledraw;
setsearch "http://[!-&(-9;-~]+\.html?", 16;//←相当適当な判定
#i = 0;
$s[0] = "\n";
gofiletop;
while ( 1 ){
  finddown;
  if( !result ) break;
  $tmp = gettext( seltopx, seltopy, selendx, selendy ) + "\n";
  if( strstr( $s[#i], "\n" + $tmp ) == -1 ){
    if( strlen( $s[#i] + $tmp ) > 8000 ){
      #i = #i + 1;
      $s[#i] = "\n";
    }
    $s[#i] = $s[#i] + $tmp;
  }
  moveto selendx, selendy;
}
//URL list の作成
newfile;
showwindow 0;
#j = 0;
while( #j <= #i ){
  insert $s[#j];
  #j = #j + 1;
}
replaceallfast "^\n", "", regular;
showwindow 1;
//検索を初期状態に戻す
if( !#reg_search ){
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
  writeregnum "SelectFound",#reg_search;
  envchanged;
  closereg;
}
setsearch $search, #search;

[ ]
RE:15401 grepの結果にもう一度grepを実行No.15404
恭平 さん 03/09/18 19:08
 
Iranoanさん、ありがとうございます。感謝感謝の気持ちです。
URLが重複もせず、イメージ通りのものでした。

もう一つ図々しいお願いをしていいですか。
http://の部分だけでなく、その後2行くらい同時に取り出すことはできませんか。
そのhttp://が何を言っているか知りたいのです。
お忙しいところ、あのような大きなマクロを作っていただいて、その上お願いするの
は心苦しいのですが..。伊藤



[ ]
RE:15404 grepの結果にもう一度grepを実行No.15405
Iranoan さん 03/09/18 19:56
 
 恭平さん今日は、Iranoan です。
> http://の部分だけでなく、その後2行くらい同時に取り出すことはできませんか。
> そのhttp://が何を言っているか知りたいのです。
 この 2 行って、grep を行った元のファイルの 2 行ですよね。
 理論的には出来ますが、ルーチンが複雑になるのでパスします。ただ、grep
の結果を加工することを前提として、
(1) 重複している URL はファイルから削除
    それ以外の行はそのまま
(2) http://〜.htm の URL はマクロ終了後、[下候補] で検索可能とすること
    で、URL は比較的早く探せる
というマクロなら簡単です。
//-------------------------------------------------------------------
//検索状態を保持
#reg_search = searchmode;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
writeregnum "SelectFound",1;
envchanged;
closereg;
//URL の取り出し
disabledraw;
setsearch "http://[!-&(-9;-~]+\.html?", 16;//←相当適当な判定
#i = 0;
$s[0] = "\n";
gofiletop;
while ( 1 ){
  finddown;
  if( !result ) break;
  $tmp = gettext( seltopx, seltopy, selendx, selendy ) + "\n";
  #j = 0;
  while( #j <= #i ){
    if( strstr( $s[#j], "\n" + $tmp ) != -1 )break;
    #j = #j + 1;
  }
  if( #j > #i){
    if( strlen( $s[#i] + $tmp ) > 8000 ){
      #i = #i + 1;
      $s[#i] = "\n";
    }
    $s[#i] = $s[#i] + $tmp;
    moveto selendx, selendy;
  }
  else{
    selectline;
    delete;
    golinetop2;
  }
}

if( !#reg_search ){
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
  writeregnum "SelectFound",#reg_search;
  envchanged;
  closereg;
}
//<- ここまで

 あと先のマクロは重複 URL のチェックが甘かったので、「URL の取り出
し」部分だけ末尾に書き直しました。                    ~^^^^^^^^^^^^
^^^^^^^^^^^^
 最後に、これ以上のマクロの話題になるので、このマクロへの要望/質問は、
http://www.maruo.co.jp/hidesoft/4/ で新たなスレッドを立ててください。

//URL の取り出し
disabledraw;
setsearch "http://[!-&(-9;-~]+\.html?", 16;//←相当適当な判定
#i = 0;
$s[0] = "\n";
gofiletop;
while ( 1 ){
  finddown;
  if( !result ) break;
  $tmp = gettext( seltopx, seltopy, selendx, selendy ) + "\n";
  #j = 0;
  while( #j <= #i ){
    if( strstr( $s[#j], "\n" + $tmp ) != -1 )break;
    #j = #j + 1;
  }
  if( #j > #i){
    if( strlen( $s[#i] + $tmp ) > 8000 ){
      #i = #i + 1;
      $s[#i] = "\n";
    }
    $s[#i] = $s[#i] + $tmp;
  }
  moveto selendx, selendy;
}

[ ]