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;
# ====================================================
[上に]
[前に]
[次に]