カレッヂ |
質問者 バカボン
投稿日 2004/5/4(火) 15:53:45
現在ログファイルuser.cgi user2.cgi user3.cgi user4.cgi とありますが 検索して該当するデータ表示させたいのですが、これらのログファイルを1つにして 検索させるためのソースが上手くできません・・・ 下記のソースでおかしいところを指摘していただけないでしょうか? ※FileOpen〜FileOpen4のサブルーチンは設定済みです ----------以下が該当する検索部分のソースです ################ # FileOpen # ################ sub FileOpen{ my($handle,$file,$name)=@_; if(!open($handle,$file)){ ($name eq '') and $name=(split/\//,$file)[-1]; &Error("$nameが開けません。"); }} ------------------------------------------------------------------- if($FORM{Tfile} eq 'Data' and $CNF{Check}{UdataSearch}){ &FileOpen('FILE',"$UserDir/user.cgi"); &FileOpen2('FILE',"$UserDir/user2.cgi"); &FileOpen3('FILE',"$UserDir/user3.cgi"); &FileOpen4('FILE',"$UserDir/user4.cgi"); (FILE) = (&FileOpen,&FileOpen2,&FileOpen3,&FileOpen4); while(<FILE>){ my@tmp=split(/<>/,$_); @{$USER{$tmp[$REC{User}{UserNum}]}}=@tmp; }close(FILE); }my$char='(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; my$file=($FORM{Tfile} eq 'User')?"$UserDir/user.cgi":"$DataDir/data/data.cgi"; my$file=($FORM{Tfile} eq 'User')?"$UserDir/user2.cgi":"$DataDir/data/data.cgi"; my$file=($FORM{Tfile} eq 'User')?"$UserDir/user3.cgi":"$DataDir/data/data.cgi"; my$file=($FORM{Tfile} eq 'User')?"$UserDir/user4.cgi":"$DataDir/data/data.cgi"; &FileOpen('SEARCH',$file); while(<SEARCH>){ $found=1; ($FORM{SearchMax} and @HitNums>=$FORM{SearchMax}) and last;
プロバイダ参照: |
回答者 しあわせのツボ
[削除]
投稿日 2004/5/6(木) 14:22:30
同じファイルハンドル名で複数のファイルを同時に開こうとしているように見受けます。 同じ名前で同時に開けるファイルは1つで、 新しいファイルを開くと前のファイルは自動的にcloseされます。 foreach $i ('',2,3,4) { if(open(FILE,"user$i?.cgi") { &Error("ファイルが開けません。"); } foreach(<FILE>) { @{$USER{$tmp[$REC{User}{UserNum}]}}=split(/<>/,$_); } close(FILE); } これで、@{$USER{$tmp[$REC{User}{UserNum}]}}に4ファイル全てのデータが入ります。 こんなんで参考になりますでしょうか。 |
質問者 バカボン
[削除]
投稿日 2004/5/6(木) 15:45:26
さっそくお答え頂きましてありがとうございます。 そこで実際に書いて頂いたソースは 下記のソースの中で該当する範囲はどこからどこになるのでしょうか? それとも下記のソース全てでしょうか? FileOpenのサブルーチンはそのままでよろしいのでしょうか? if($FORM{Tfile} eq 'Data' and $CNF{Check}{UdataSearch}){ &FileOpen('FILE',"$UserDir/user.cgi"); &FileOpen2('FILE',"$UserDir/user2.cgi"); &FileOpen3('FILE',"$UserDir/user3.cgi"); &FileOpen4('FILE',"$UserDir/user4.cgi"); (FILE) = (&FileOpen,&FileOpen2,&FileOpen3,&FileOpen4); while(<FILE>){ my@tmp=split(/<>/,$_); @{$USER{$tmp[$REC{User}{UserNum}]}}=@tmp; }close(FILE); }my$char='(?:[\x00-\x7F\xA1-\xDF]|[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])'; my$file=($FORM{Tfile} eq 'User')?"$UserDir/user.cgi":"$DataDir/data/data.cgi"; my$file=($FORM{Tfile} eq 'User')?"$UserDir/user2.cgi":"$DataDir/data/data.cgi"; my$file=($FORM{Tfile} eq 'User')?"$UserDir/user3.cgi":"$DataDir/data/data.cgi"; my$file=($FORM{Tfile} eq 'User')?"$UserDir/user4.cgi":"$DataDir/data/data.cgi"; &FileOpen('SEARCH',$file); while(<SEARCH>){ $found=1; ($FORM{SearchMax} and @HitNums>=$FORM{SearchMax}) and last; |
このページは終了したので返信(回答)は書きこめません
Web裏技 |