• ベストアンサー

【perl/cgi】文字列を検索して、その個数を数えたい

はじめまして、perlをはじめて1週間のものです。 本やwebサイトをみてあくせくしております。 【本題】 あるtxtファイルを読み込んで、そのファイル中に該当の文字列がいくつあるかを 数え、webの画面に出そうとしております。 具体的には、txtファイルは router Cisco switch Hitachi router Sumitomo router Juniper hub melco router acton switch extream これを読み込んで、ルータやスイッチ、ハブの数を出したいのです。 webにあらわす方法は、先達の先輩たちのsourceを見て、下のようにヘッダ/フッダ は、作れそうなのですが、肝心の本体がどうにもわかりません。 なにか良い方法ありませんでしょうか。 読み込むべき機器台数ファイルは、別箇所に保存してあるものなのでopenとかでもって くるんだろうなという位しか、、、、。 どうぞよろしくお願いします。

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

  • ベストアンサー
  • the845t
  • ベストアンサー率33% (246/743)
回答No.2

@count = (0,0,0); open(OF,"<hoge.txt"); while(<OF>){ ($group,$name) = split(/\s/,$_); if($group eq "hub"){ $count[0]++; } elsif($group eq "router"){ $count[1]++; } elsif($group eq "switch"){ $count[2]++; } } close(OF); print "hub : $count[0]<br>\n"; print "router : $count[1]<br>\n"; print "switch : $count[2]<br>\n"; テストしてみると動かなかった上におかしかったので修正。

harasan
質問者

お礼

質問してからとても早いヒントをいただきまして、 大変助かりました。 hostsファイルから稼動機器台数を調べるために必 要でした。 ありがとうございました。

harasan
質問者

補足

たいへん迅速なお返事ありがとうございます。 もう一つお願いなのですが、txtファイル中にある文字が、 いかのようなものでした。 super_router Cisco bochibochi_switch Hitachi otegoro_router Sumitomo super_router Juniper otegoro_hub melco kakuyasu_router acton super_switch extream この場合に、router、switch、Hubの数を知りたいのです。 すみません。がんばって勉強しますので、今回はなにとぞご教授ください。

その他の回答 (3)

  • the845t
  • ベストアンサー率33% (246/743)
回答No.4

下の方もやられてますが、 正規表現でその単語を含むかどうかを調べます。 if($group eq "hub"){ $count[0]++; } elsif($group eq "router"){ $count[1]++; } elsif($group eq "switch"){ $count[2]++; } を、 if($group =~ /hub/){ $count[0]++; } elsif($group =~ /router/){ $count[1]++; } elsif($group =~ /switch/){ $count[2]++; } かな・・・ たぶん。

harasan
質問者

お礼

なるほど、丁寧な回答をいただきありがとうございます。 参考になりました。

  • jubay
  • ベストアンサー率30% (3/10)
回答No.3

perl は同じことをやるにも様々なやり方ができます。 下記の例もその一つです。参考にしてください。 %count = ('router'=>0,'switch'=>0,'hub'=>0); open (FILE,"<hoge.txt") or die; while (<FILE>) { foreach $key (keys %count) { if (/$key/) { $count{$key}++; } } } close FILE; foreach $key (keys %count) { print "$key = $count{$key}\n"; }

harasan
質問者

お礼

なるほど、勉強すべきKeyWordがどんどんわかってきました。 ありがとうございます。

  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

単純に、 @count = (0,0,0); open(OF,"<hoge.txt"); while(<>){ ($group,$name) = splice("\s",$_); if($group = "hub"){ $count[0]++; } elsif($group = "router"){ $count[1]++; } elsif($group = "switch"){ $count[2]++; } } close(OF); print "hub : $count[0]<br>\n"; print "router : $count[1]<br>\n"; print "switch : $count[2]<br>\n"; こんなんで良いんじゃないかと… 最近Perl触れてないので自信なしです。

harasan
質問者

お礼

質問してからとても早いヒントをいただきまして、 大変助かりました。 hostsファイルから稼動機器台数を調べるために必 要でした。 ありがとうございました。

関連するQ&A