CGI-BBS > CGI > Perl > 複数のログファイルをオープンさせて検索する機能を持たせたい。


カレッヂ
カレッヂ


質問者 FELIX  投稿日 9/19(木) 11:54:57
以下は一つのログファイル中のデータを検索する機能です。
一度私のサイトを見るとわかると思いますが、
これは一つのファイルに限るのでほかのファイルを同時に検索する事ができません。
一つのログファイルを一つにまとめればとお考えでしょうが、
こちらの都合によりそれはできません。もう、スタートして1年経ちますから…
私としてはあきらめかけていたのですが、
先日のアドバイスで一つの問題が見事に解決しましたので、思いきって質問します。
URL http://www.mirai.comm.to/

open (IN,"$dat_file") || die &error ("検索システムにエラー発生!");
	@new = ();
	while (<IN>) {
		($no,$name,$title,$url,$comment,$email,$banner,$F) = split(/ \^ /);
		$file = "$title,$comment";
		$file =~ tr/[A-Z]/[a-z]/;
		$flag = 0;
		foreach $pair (@pairs) {
			if (index($file,$pair) >= 0) {
				$flag = 1;
				if ($FORM{'celect'} eq 'OR') {last;}
				}else{
				if ($FORM{'celect'} eq 'AND') {$flag = 0 ; last;}
			}
		}
		if ($flag == 1) {push(@new,$_);}
	}
	close (IN);

	$total = @new;
	$count = @new;
	if ($total eq 0) {
		$count = 1;
	}

	if (!$total) {&error ("お探しの【$user_word】は見つかりませんでした。");}

プロバイダ参照:http://w3.itss.or.jp/
サーバのOS:不明
パソコンのOS:Win95系
エディタ:TerePad
FTPソフト:FFFTP
サーバ移転:していない
改造:していない
CGI習熟度:middle

回答者 しあわせのツボ  [削除]  投稿日 9/19(木) 13:00:43
ログフォーマットが同じなら、読み込みをforeachで回せばよいかと思います。

@new = ();
foreach ('log123.dat','logxyz.dat','log.dat') { #<手抜き
	if (!open (IN,"$_")) { &error("検索システムにエラー発生!"); exit(0); }
	while (<IN>) {
		# なんのかんのして
	}
	close (IN);
}

$total = $count = $#new;
$total?$total:$total=1;

if (!$total) {&error ("お探しの【$user_word】は見つかりませんでした。");}
質問者 FELIX  [削除]  投稿日 9/19(木) 14:28:17
foreach関数でループさせれば良かったのか…
過去に試した事があったんですけど失敗しました。
複数のファイルをオープンさせる事なんて半年前にあきらめていた事なんですが、
実は出来るんですね。私の1年間悩んでいた問題が解決できた事を感謝します!

このページは終了したので返信(回答)は書きこめません

Web裏技