• ベストアンサー

特定の文字の個数を取得する簡単な方法ありますか?

tthe_mineの回答

  • ベストアンサー
  • tthe_mine
  • ベストアンサー率46% (19/41)
回答No.1

@tmp = ($_ =~ m/:/); if (scalar(@tmp) == 6) でどうでしょう。

関連するQ&A

  • 302 Found 回避方法について

    仕様ブラウザ:Firefox 使用OS:Windows XP 使用言語:Perl 例えば、 list.txt:1行に1つのアドレスを複数行書いてあるtxt location.cgi:list.txtに書いてあるアドレスをランダムに表示させるCGI の時に、 http://***/location.cgi のように、HP上に自作のCGIを乗せて、アクセスしたところ 「302 Found The document has moved here.」 と表示されます。 302Found のhereをクリックして表示された部分のアドレスも http://***/location.cgiであり、 再び、 「302 Found The document has moved here.」 と表示されます。以下繰り返しの状況が続きます。 調べたところ、 URIが一時的に移動しているというのがわかったのですが、 解決方法がわからなかったので質問させていただきます。 location.cgiの概要は、以下です。 あと、スタートする前に、隠しフォームで、name="start",value="start"を渡しています。 location.cgi #!/usr/local/bin/perl #隠しフォームでstartを持っていたらlist.txtに表示したい全てのURLを書き込む #%inがフォームからの情報受け取りしています。 if($in{start} =~ /start/){ #list.txtを書き込み専用で開く #全url(***01~10)を書き込む open (RESET,">list.txt") or die; for($num = 1; $num <= 10; $num++){ if($num <= 9){ print RESET "http://***0$num.htm\n"; }else{ print RESET "http://***$num.htm\n"; } } close(RESET); } #list.txtを読み込み専用で開く #@linkに読み込み内容を格納 open (READ,"list.txt") or die; @link = <READ>; foreach(@link){ chomp($_); } close(READ); if($link[0] !~ /http.*htm/){ #participants.htmへLocation print"Location: http://***/last.htm\n\n"; #list.txtを書き込み専用で開く #全url(***01.htm~***10.htm)を書き込む open (PRINT,">list.txt") or die; for($num = 1; $num <= 10; $num++){ if($num <= 9){ print PRINT "http://***0$num.htm\n"; }else{ print PRINT "http://***$num.htm\n"; } } close(PRINT); }else{ #@linkの要素をランダム化 srand; @new = (); while(@link){ push(@new,splice(@link,rand @link,1)); } #ランダム化したリンクにLocation print"Location: $link[0]\n\n"; #list.txtを書き込み専用で開く #@newの先頭配列を消去してから書き込む open (PRINT,">list.txt") or die; shift @new; foreach(@new){ print PRINT "$_\n"; } close(PRINT); } ※配列の中身を消して、list.txtに書きなおしていたりするのは、 非重複でランダムにURLを表示していきたいからです。

    • ベストアンサー
    • CGI
  • 文字化けを直す方法

    ホームページ作成中です。 あるCGIで出来たリストの一部だけをSSIで表示させようとしています。 イメージとしては買い物籠CGIの登録されている商品名だけを一覧表示みたいなものです。 リストのdatファイルは「EUC」で保存されています。 下の表示させるCGIと表示先のhtmlは「S-JIS」で保存しています。 リスト表示は他のCGIからコピーして少々変更しただけの物です。 ------------------------ #!/usr/bin/perl require './jcode.pl'; #jcode::convert(\$str, 'euc', $code); print "<center>\n"; print "<TABLE>\n"; print "<TR><TD>語録一覧</TD>\n"; print "</TR>\n"; print "<TR><TD>\n"; open (FILE2,"./data/word.dat"); @file = <FILE2>; close FILE2; $no = -1; foreach (@file) { $no++; # local($file,$number,$word,$yomi)= split /\t/,$data[$i]; local($file,$number,$word,$yomi)= split /\t/; print "$word<BR>\n"; } print "</td></TR>\n"; print "</table>\n"; print "</CENTER>\n"; exit; ------------------------------- こうすると、リスト($word)が文字化けします。(英数は化けずに表示。って当たり前ですね) どうにかしてEUCのリストのみ表示するときS-JISに変換する方法などないでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • 特定文字列で囲まれた範囲を抜き書きするためには?

    特定の文字列で開始され、特定の文字列で終了するテキストの一部を抜き出すためには、コマンドラインからは perl -ne 'print if /開始文字列/ .. /終了文字列/' file.txt でできると思うのですが、これがたとえば $page 変数に入ったテキストで同様の処理を Perl 内部のスクリプトで行う時にはどうすればいいのでしょうか? while(<$page>){ ... } とかやって1行1行処理してみようと思ったのだけど、できません。

    • ベストアンサー
    • Perl
  • スクリプトの繰り返しの防止

    下記のようなスクリプトがあります。 これは、CSVファイルを1行表示し、編集可能にするスクリプトの1行表示部分です。 これを全行表示するスクリプトに変更したいと考えています。 while ($cnt) { foreach(@csv2){  .............................. } } とすると無限ループするようです。(サーバーが固まる) webで調べたのですが、$cnt = '1'or die "$!"としても抜けだせません。 行が無くなったら作業を終了するとしたいのですが、どうすればいいでしょうか? 初歩的な質問で恐縮なのですが、レンタルサーバーをこれ以上固まらせるわけ にもいかないため、ご教授頂ければと思います。 @csv2 = split(/\<>/,$csv[$param{'num'}]); $cnt = '1'; foreach(@csv2){ &trString(\$_, "1",); if($_ eq $csv2[-1]){ chomp($_); } print "<tr>\n"; print qq|<td><input type="text" name="$cnt" size="30" value="$_"></td>|; print "</tr>\n"; $cnt++; }

    • ベストアンサー
    • Perl
  • 文字化けを修正して表示

    すでに文字化けして保存されてしまっているメールのsubujectの文字化けを修正して表示させたいと思っています。CGI/perlでこのようなことは可能なのでしょうか。 NAMAZUにおいてはどうやらできているので、もしperlじゃなくこうすればできるというのでもかまいませんので教えていただけませんでしょうか。 なお、メールのsubjectは次のようにして抜き出しました。 FILESUBJECT: while (<@fileadd>){   #fileaddはファイルのリスト open (MFILE,$_); while (<MFILE>){ if ($_,/^Subject:/) { s/Subject://; chop; push @subject,$_; #print; next FILESUBJECT; } } } print "@subject\n"; これでsubjectの中身は取れるのですが、文字化けをどうすれば直せますか? なお、OSはsolaris8です。

    • 締切済み
    • CGI
  • ランダム文字列

    srand; @array = a .. z; @new; while ( @array ) { push( @new, splice(@array , rand @array , 1) ); } print @new, "\n\n"; print "<br>"; print @new, "\n\n"; print "<br>"; print @new, "\n\n"; ↑のような感じでランダム文字列の作成を考えています。 上記スクリプトですと、 aewpodigtusnkjycfxvmzqrlhb aewpodigtusnkjycfxvmzqrlhb aewpodigtusnkjycfxvmzqrlhb ↑のようにどの行も同一文字列になってしまいます。これを、行毎に異なった8文字のランダム文字列にしたいのですが、方法がわかりません。 いっぺんに100行のランダム文字列を生成する必要があります。どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • EXCELで特定の文字を含むデータの個数について

    下記のようなデータがあります。 (1表) AB_CDE_2345 CD_EFG_567 EFG_HIJK_890 LM_NO-p_UU_123 QRS_TU-VZ_456 AB_CDE_345 EFG_JJK_123 ・ ・ (2表) AB_CDE EFG LM_NO-p 1表のデータで2表にある特定の文字を含むデータの数を特定の文字ごとに数えたいです。 実際には1表は1000行くらい、2表は20行くらいあります。 どのような方法が効率的でしょうか?アドバイスお願いいたします。 特定の文字は文字頭からの場合と文字の途中にある場合があります。 また、ACCESSの使用も可能です。 よろしくお願いいたします。

  • セル内にある文字の個数を知りたい

    エクセル2002を使用してますが、セル内にある文字の個数を知りたいとき、どのような関数を使えばいいのでしょうか? たとえば、A1に「ABCAABACABAC」 という文字列があった場合、Aの個数を知りたいのです。 このとき結果をB1で表示させるにはどうすればいいのでしょうか? よろしくお願いします。

  • Excel;特定の文字を含むセルを書き出す方法

    お世話になります。 あるExcelシートの2列×300行ぐらいの範囲のセル内に 文字が入っています。 セル内(例A23idokensi)に特定の文字(例:A23)を含んでいたら、 もしくはセルを抜き出す方法はあるでしょうか? やりたいことは、アトランダムに入力されているところから、 特定の文字を含んだセルだけ取り出して内容とセルの個数を 数えることです。

  • excel2010で個数を数えたい

    Windows7でexcel2010を使用しています。 曜日を入力した行とその下の行に曜日に応じてセルの背景色が変わるように条件付き書式設定をしています。曜日の行とその下の行は同じ色になる設定です。 曜日の下の行には文字を入力します。 条件付き書式設定で変更されたセルの背景色で特定の色かつ特定の文字列が入力されたセルの個数を数えたいのですが何か方法はありますでしょうか? たとえば、A1~AE1に曜日を入力していて、平日は背景色なし、土曜日は背景色青、日曜日は背景色赤になるように条件付き書式設定をします。 A2~AE2には色々な文字を入力しますが、上のセルと同じ色になるようにしています。 A2~AE2に〇と入力されていて、且つ背景色なしのセルの個数を数えたい場合はどうすれば良いでしょうか?〇と入力されていて背景が青の場合、赤の場合のセルの個数も数えたいです。 本当は背景色ではなく文字色を条件付き書式設定で変更してその個数を数えたいのですが、色々検索したところ文字色では難しそうなので背景色を変更することにしました。 説明が下手で申し訳ありませんが、どなたかご教授しただけますと幸いです。