- ベストアンサー
検索後の「見つかりません」がたくさんでてしまいます。
こんにちは!初歩的な質問失礼致します。 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"; } } 「見つからない!」を一回だけ表示させるにはどうしれば良いでしょうか? 申し訳ないですが上記にプログラムを追加して、解説の方宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
上記スクリプトをそのまま使うのであればフラグを使ってやるのが一番手っ取り早そうですね。 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 "見つからない!"; } これで上手くいくと思います。
その他の回答 (1)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
ロジックを読むと、連想配列(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";} は、同じ結果で、”無いじゃん”と出せます。 (前半のムダを排除しました)
お礼
返信ありがとうございます!こういう書き方もあるのですね。参考にさせていただきます。
お礼
返信ありがとうございます!参考にさせていただきますね!