ネタバレや腐臭発言が混じるらくがきメモ

2008年11月10日(月) nickyの日記内検索

CGIファイルって一回開けるとまた何やらやりたくなりますよね…やってました。
nickyの日記内検索でand検索とor検索ができるようにしてみた。なってるんじゃないかな。なってるといいな。またもcgiを直接書き換えてるので危険です(今度はnicky.cgi。ver.2008/07/09)
「検索」という項目にある「sub NickySerch」をこんなふうにした。長いのでたたみます
sub NickySerch{
my($aaa, $gomi, $fn, $fname, $gfn);
my($find, $startno);
my($pageno, $flaglog);
my($cnt);

$ModeSub=16;
$Mode="MONTH";
#ヘッダを出力
&nickyGetHead();
if( $UseSearchHD eq "Yes" ){
print &put_macro($head2nd);
}else{
print &put_macro($head);
}
print "$br検索キーワード『$SerchWord』$br\n";

$SerchWord=~s/\"/\\\"/g;
$SerchWord=~s/\'/\\\'/g;
$SerchWord=~s/\`/\\\`/g;
$SerchWord=~s/\\/\\\\/g;
$SerchWord=~s/\|/\\\|/g;
$SerchWord=~s/\?/\\\?/g;
$SerchWord=~s/\//\\\//g;
$SerchWord=~s/\-/\\\-/g;
$SerchWord=~s/\*/\\\*/g;
$SerchWord=~s/\=/\\\=/g;
$SerchWord=~s/\&/\\\&/g;
$SerchWord=~s/\,/\\\,/g;
$SerchWord=~s/\(/\\\(/g;
$SerchWord=~s/\)/\\\)/g;
$SerchWord=~s/ / /g;
$SerchWord=~tr/ / /s;
$SerchWord=~s/^ //;
$SerchWord=~s/ $//;
$SerchWord=~s/ (or|OR|or|OR) /\|/g;
@nli=&GetNickyList("r") if( !@nli );
SLABEL:for $gfn(@nli){
$NickyFname="$vDir/$$gfn[0]";
&GetDateFromFname();
&GetNickyFile($NickyFname);

next if( !$Title && !$Message );
$msg=$SerchWord;
$Tmessage = $Title.$Message;
$Tmessage =~ s/<[^>]*>//g;
@SWord = split(/ /, $SerchWord);
$cword = @SWord;
for($i = 0; $i<$cword; $i++){
next SLABEL if($Tmessage !~ /$SWord[$i]/);
}
&PutNickyOneDay();
print "$br";
}

&NickyReturn();
if( $UseSearchFT eq "Yes" ){
print &put_macro($foot2nd);
}else{
print &put_macro($foot);
}
}

ほんとに長い…。実際に変わってるのは10行くらいのはずですが。「日付から曜日を取得」の直前の行までです。
スペースを挟むとand検索で、「いっこめ or にこめ」みたいにやるとor検索。半角全角大文字小文字は区別しちゃいます。

しょっちゅう過去の日記にリンク貼るから日記内検索は自分でよく使うんですが、無意識に検索ワードを2つ入れてしまったりするのでand検索が欲しかったんです。
or検索は「or」を「|」に置換すればいいのよね、ふふ簡単簡単。じゃあand検索はスペースを&に置換すればいいのよね、やったーできあがりー! と思ったら全然できあがりじゃなかった。なんでできないんだろうと思ってgoogle先生に聞きに行ったら、同じような疑問を持った人が質問掲示板で質問してて、くわしい人たちが「言っている意味がよく分かりません」みたいな感じに答えてたのでなんか恥ずかしかったです!

追記。デフォルトだと検索結果は古い方が上ですが、これだと新しい方が上になっちゃいます。上のだと
@nli=&GetNickyList("r") if( !@nli );
という行がありますがこれを
@nli=&GetNickyList("tr") if( !@nli );
にすれば古い方が上になるはず
月別ログ
日記内検索機能

RSS

PaintBBS / spainter Shi-dow
Diary CGI  Nicky! + rssnicky