• ベストアンサー

【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とかでもって くるんだろうなという位しか、、、、。 どうぞよろしくお願いします。

  • CGI
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
  • 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

  • 文字列の個数

    Microsoft Excel2002(XP)で質問ですが、ある範囲の中からA列が☆かつC列が▲の個数を表示させるような関数ってありますか?

  • cisco catalyst3500が起動しない

    cisco catalyst3500を起動するとtera termで swich: と出たまま初期設定画面へ移行しません。 helpを参照し色々とコマンドを打ってみたんですけど回復しません。 何か良い方法はありませんか? 直前にdeleteコマンドでfalshメモリのtxtファイルを削除したようなんですが・・・。 あとスイッチの正面にあるsystemの所のLEDボタンがずっと点滅したままです。  皆様お忙しい方思いますが、お詳しい方宜しくお願いいたします。

  • 列のユニークな文字列の個数を数える(条件付き)

    こんにちは。 「Excel 列の中のユニークな文字列の個数を数える」 http://okwave.jp/qa/q7469801.htmlではお世話になりました。 Excel 2007でA列にあるユニークな文字列の個数を数える マクロを教えていただき助かりました。 次のステップですが、 A列    H列 ABC12345 AB ABC12345 AB ABC12345 AB ABC12345 AB のようにH列がABだけのものの個数を数えたいです ABC54321 AB ABC54321 CD ABC54321 AB ABC54321 AB の様なものは数えません どのような条件をつければユニークな個数が数えられますか? おわかりの方お教えください。

  • perl cgiでサ-バ内検索

    perl cgiで 自分のサ-バ内に置いてある*.c,*.h等の ソ-スファイル内のkeyword検索(文字列等)の できる無料perl cgiを探しています。 URLの検索するcgiは、多数見つかったのですが、 デ-タ検索が見つかりません。 どなたか教えて下さい。

  • エクセルで文字列の個数を数える

    ある範囲のエクセルデータから決まった文字列の個数をカウントする関数の使い方が判れば教えてください。 例えば、A1からH200までのデータより、”リンゴ”という文字列が何個あるかカウントしたいのですが。 COUNTIF(A1:H200,"*リンゴ*")とすると”リンゴ”という文字列が含まれるセルの個数は出たのですが、”リンゴ”という文字列が複数含まれるセルもあるので、”リンゴ”という文字列の個数とは 一致しないようなのです。 どなたか、よろしくお願いします。

  • 文字列の中からある文字の個数を調べるには?

    お世話になります。 abcdefga という文字列の中からaが何個あるのか調べる関数はありますでしょうか? http://www.yahoo.co.jp URLからスラッシュの個数を調べたいのですが。

  • ファイルからある文字列の個数を数えたい

    perl5でunixの"wc"や"grep -c"みたいに1つのファイルの中からある文字列の個数を カウントするスクリプトを作ろうとしています。 ファイルは256文字×10万行くらいのテキストで、 検索する文字列は15文字前後×40個(例えば「apple-000001」「lemon_orange」など)です。 どのようなスクリプトを組んだら効率よく各文字列をカウントできるのでしょうか? それよりwcやgrep -cを40回行った方が早いのでしょうか?

    • ベストアンサー
    • Perl
  • セル内の文字列の個数

    どうも巧く行かないのでよろしくお願いいたします Excel:A1に ”あああ,ああ,いいい” と入力されているとします 答えを 3 にしたいのです ”あ、あ、い” でしたら出来るのですが文字数が多くなると出来ません ”つまり”,”で区切った文字列は3つ という意味です LEN,SUBSTITUTEなど組み合わせてみたのですが ,の数 2とか あるいは 文字数として 8としか出てきません 文字列の数が知りたいのです よろしくお願いいたします。

  • 文字列中のキャラクタの個数を数えたい

    ある文字列の中に、特定のキャラクタが何個入っているか見つけ出す関数を探しています。 たとえば text = "http://www.asahi.com/business/update/TEST.html" として、textの中に「/」が何個入っているか確認したいです。

  • 複数列の中の文字列の検索、個数抽出

    どなたかお力をお貸しください。。 エクセル2003を使用しています。    A列 B  C  D 1  あ  う     あ 2  い  お  か  か 3  う        う 4  え     き  く 5  お  い  う  け Dの文字列のなかでA~C列の中に重複している文字が何個あるかを出したいです。 この場合D列は「あ、か、う、く、け」なので、A~C列にある「あ、か、う」が重複しているので、3個と出したいです。 もしくは重複していない「く、け」で2個と出したいです。 MATCH関数を使うと出来そうなのですが、MATCH関数だと配列の概念がなさそうなので、どうしたものかと。 条件として、 ・一つのセルで関数を使用して出す。 ・マクロ、計算用のセルはできたら使用しない。 ・空白セルもあり、文字列の完全一致のみ個数としてカウント。 ・列の数はだんだん増えてくるので、列数は増えても大丈夫なやり方の方がいいです。 COUNTIFで重複個数を出すと、「う」が複数回出てくるので、重複の個数が増えてしまい困っています。 もしかしたら不可能かもしれませんが、どなたかお知恵をお貸しください。 よろしくお願いいたします。

専門家に質問してみよう