1つのファイルで検索結果を複数表示するには?

[上に] [前に] [次に]
こう 1999/09/17(金) 12:06:29
こんにちは。いつも、ものすごくお世話になってます。

検索フォーム設置法を使わせて、頂いてるのですが
1つのファイルで複数の文字が検索された場合
設置法だと、一つしか表示されませんよね。

これを、複数表示できるようにしたいのですが
いろんな、ページを探しても分かりません。

ご多忙中、申し訳ありませんが、回答お願い
します。

あしだ 1999/09/22(水) 13:02:34
はじめまして > こうさん、みなさん

私も同一ファイル内の複数の記述にマッチする検索機能が必要で、
こうさんの発言にレスがつくのを楽しみにしていたのですが、何と
か自力で wwwsrch.cgi を改造できました。

ただし、私自身は cgi も perl も始めて3日目のド素人ですので、
そこのところご了承の上、ご自分の責任でご利用願いますね。

有識者のみなさまのフォローも、どうぞよろしくお願いします。

では、ここから。
wwwsrch の sub search2 について、

(1) "# それぞれの検索語に対して・・・" の直前で $match_count
に 0 を入れ、また、"# すでに見つかっているなら次の行"の直後の
記述をコメントアウトします。
# === cut here =======================================
$match_count = 0;
# それぞれの検索語に対して・・・
foreach $word (@words) {
# # すでに見つかっているなら次の行
# if ($wordflag{$word} == 1) { next; }
# ====================================================

(2) "# 表示する" の行から10行下の、$target を変えてるところを
次のように変更します。
# === cut here =======================================
print "( <A HREF=\"$target\" TARGET=out>";
{ # ここから、
$local($target) = $target;
$local($ip1) = $i+1;
$target =~ s/$tdir\/?//;
print "$target</A> : $ip1)\n";
} # ここまでを変更
print "<DD>";
# ====================================================

(3) 最終行近傍、print "\n"; の直前に next; を追加します。
# === cut here =======================================
}
next; # これね
print "\n";
last loop;
# ====================================================
以上です。

こう 1999/09/28(火) 14:35:58
はじめまして、こうです。

ありがとうございます。きゃー。できました。
本当にありがとうございます。
Perl初めて、3日間なのに、すごいですね。
私なんか・・・。 (^^;

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

Rena [E-Mail] 2000/02/25(金) 00:59:53
拝見させて頂きました。
私も同じような事でいろいろと探していまして、やっとここにたどりつきました。

現在わたしは「wwwsrch.cgi Ver3.05」を利用しているのですが、上記のように記載したのですが、何故かエラーが出ちゃいます。

----------------
$match_count = 0;
# それぞれの検索語に対して・・・
foreach $word (@words) {
# すでに見つかっているなら次の行
#if ($wordflag{$word} == 1) { next; }
------------------
print "$title</A>\n";
print "( <A HREF=\"$target\" TARGET=out>";
{
$local($target) = $target;
$local($ip1) = $i+1;
$target =~ s/$tdir\/?//;
print "$target</A> : $ip1)\n";
}
print "<DD>";
-----------------------
print "$line ";
}
next;
print "\n";
last loop;
-----------------------
これってバージョンが変わったら使えないのでしょうか・・・。
コピペなんでスペルミスは無いと思います。

下らない質問でごめんなさいね。
お時間がございましたらアドバイスをお願いします。

EV [E-Mail] [HomePage] 2000/03/17(金) 20:40:19
こんにちわ。wwwsrch.cgi、重宝しております。
Renaさんのご発言の問題ですが、
ぼくは以下のように解決しています。
(何をやっているかというと、wordflagを
その都度リセットしているわけです。)
あしださんのご発言をアレンジすると次のような感じです。

(1)
# それぞれの検索語に対して・・・
    の直前に以下の一行を加えてみてください。
==========================
foreach $word (@words) {$wordflag{$word} =0;}
==========================


(2) "# 表示する" の行から10行下の、$target を変えてる前後を
以下のように変更します。
# === cut here =======================================
$original_target =$target;    #この一行を追加
                       $target =~ s/$tdir\/?//;
                        print "$target#$nametag</A> )\n";
                        print "<DD>";
$target =$original_target;   #この一行を追加
# ====================================================

(3) 最終行近傍、print "\n"; の直前に next; を追加します。
# === cut here =======================================
}
next; # これね
print "\n";
last loop;
# ====================================================

EV [E-Mail] [HomePage] 2000/03/18(土) 02:57:06
前の発言のやり方だとAND/OR検索が
うまくいかないことに気づきました。
というわけで、以下訂正版です。

(1)sub search2の「# 各種変数を初期化する」を変更します。

# === cut here =======================================
# 各種変数を初期化する
#     undef %wordflag;   #この行をコメントアウト
        $title = "";
#     $match_count = 0;  #この行をコメントアウト
# ====================================================

(2)以下の二ヶ所を変更します(上の初期化を別の場所で行うということです)。

# === cut here =======================================
  # それぞれの検索語に対して・・・
        undef %wordflag;   #この行を追加
# ====================================================

# === cut here =======================================
        # それぞれの行に対し・・・
        loop: for ($i = 0; $i <= $#lines; $i++) {
      $match_count = 0;  #この行を追加
# ====================================================

(3) "# 表示する" の行から10行下の、$target を変えてる前後を
以下のように変更します。

# === cut here =======================================
$original_target =$target;    #この一行を追加
                    $target =~ s/$tdir\/?//;
                     print "$target</A> )\n";
$target =$original_target;   #この一行を追加
# ====================================================

(4) 最終行近傍、print "\n"; の直前に next; を追加します。

# === cut here =======================================
}
next; # ここです
print "\n";
last loop;
# ====================================================

[上に] [前に] [次に]