• ベストアンサー

検索後の「見つかりません」がたくさんでてしまいます。

こんにちは!初歩的な質問失礼致します。 HTMLで名前を検索して、見つけると名前・出身地・その他を表示するというプログラミングを作っています。 検索にひっかかるときちんと表示されるとこまでいったのですが、検索で引っかからなければ「見つからない」と表示させようとして、elseをつかうと「見つからない」がたくさん出てきてしまい困っています。 サブルーチン・番兵君を使えば良いと書いてありますがはっきしどう使えばいいかわかりません。 下記がプログラムの一部なのですが open(rd,"./file.txt"); @file = <rd>; close(rd); foreach $ww2 (@file){ ($name,$shushin,$other) = split(/,/,$ww2); chomp($name); chomp($shushin); chomp($other); $SHU{$name} = $shushin; $OTHER{$name} = $other; } @name1 = keys ( %SHU ); foreach $string (@name1){ #chomp($string); #print "$string と$FORM{'item1'}<br>"; if($string eq $FORM{'item1'}){ print "見つかった名前:$string <br>     出身地:$SHU{$string} <br>     その他:$OTHER{$string}\n"; } } 「見つからない!」を一回だけ表示させるにはどうしれば良いでしょうか? 申し訳ないですが上記にプログラムを追加して、解説の方宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

上記スクリプトをそのまま使うのであればフラグを使ってやるのが一番手っ取り早そうですね。 my $FOUND = 0; foreach $string (@name1){ #chomp($string); #print "$string と$FORM{'item1'}<br>"; if($string eq $FORM{'item1'}){ $FOUND = 1; print "見つかった名前:$string <br>     出身地:$SHU{$string} <br>     その他:$OTHER{$string}\n"; } } unless ($FOUND) { print "見つからない!"; } これで上手くいくと思います。

terunosuke
質問者

お礼

返信ありがとうございます!参考にさせていただきますね!

その他の回答 (1)

回答No.2

ロジックを読むと、連想配列(SHU)にあるかどうかをチェックすれば良いように思うので.. open(rd,"./file.txt"); while(<rd>) { ($name,$shushin,$other) = split(/,/,$_); chomp($name); chomp($shushin); chomp($other); $SHU{$name} = $shushin; $OTHER{$name} = $other; } close(rd); @name1=keys(%SHU); if($SHU{$FORM{'item1'}} eq "") {print "無いじゃん<br>\n";} else {print "見つかった名前:$string <br>     出身地:$SHU{$string} <br>     その他:$OTHER{$string}\n";} は、同じ結果で、”無いじゃん”と出せます。 (前半のムダを排除しました)

terunosuke
質問者

お礼

返信ありがとうございます!こういう書き方もあるのですね。参考にさせていただきます。