• ベストアンサー

検索してあった数を調べる 初心者です。

perlを使ってabc.txtの中に 1999 という文字列が何個あるか調べるプログラムはどのように書けばよろしのでしょうか?@を使ったりしてやってみたのですが、これでは 1999 が含まれる行の数しか出し方がわかりませんでした。 ご教授ください。お願い致します。

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • sssohei
  • ベストアンサー率33% (33/98)
回答No.1

ええと、1999 が含まれる行の数がわかったということは、行ごとに処理する方法はわかっておられるわけです。 ということで。「行(つまり、文字列)に1999が含まれる数を求める方法」がわからないということですね 一番簡単なのは正規表現とのマッチングです。 この場合、1999はそのままでいいので $count++ while($str =~ m/1999/g); とか $count = ($str =~ s/1999/1999/g); でできます。高速にやりたければindex関数を検討してください open ('hoge', TEXT) or die "can't open hoge\n"; my $count = 0; while(<TEXT>) { $count++ while(m/1999/g); } close(TEXT); こんな感じでしょうか? ではでは~

Mohican
質問者

お礼

大変遅くなりもうしわけありませんでした。

関連するQ&A

  • テキスト内文字列検索 Perl言語

    テキストファイル内の文字列を「Perl」で検索したいのですが…。 例 aa.txtの中の"AA"を含む1行をデスクトップのbb.txtに追加書き込みをする。AAの部分は外部からのタイプで変化させる。 このようなPerlのプログラム、初心者ですがよろしくお願いします。

  • DOS:テキスト内の特定行の次行に文字列を追加

    DOSコマンドプログラムでテキストファイル内の特定文字列を含む行の次の行に、指定した文字列を含む行を挿入する方法 Windows7の DOSコマンドプログラムで、下記の"input1.txt" を"output1.txt"に変換したいと思っています。 "input1.txt"内で"Name:"を含む文字列があれば、その行の次の行に、"A1:10.2"という行を挿入するDOSコマンドプログラムをご教授いただけないでしょうか。見つけた文字列行の次の行に挿入する方法というのが、できなくて困っています。 ---input1.txt------ Name: Tanaka B1: H2 C1: 2 Comment: ABC# 61, Seq# M34 Num H: 3 12 37.97 13 105.90 14 203.82 Name: Suzuki B1: H2 C1: 2 Comment: ABC# 58, Seq# M39 Num H: 2 11 37.97 12 105.90 Name: Yamada B1: H2 C1: 2 Comment: ABC# 93, Seq# M397 Num H: 4 2 2.00 12 4.00 13 9.99 14 29.97 --------------- ---output1.txt----- Name: Tanaka A1:10.2 B1: H2 C1: 2 Comment: ABC# 61, Seq# M34 Num H: 3 12 37.97 13 105.90 14 203.82 Name: Suzuki A1:10.2 B1: H2 C1: 2 Comment: ABC# 58, Seq# M39 Num H: 2 11 37.97 12 105.90 Name: Yamada A1:10.2 B1: H2 C1: 2 Comment: ABC# 93, Seq# M397 Num H: 4 2 2.00 12 4.00 13 9.99 14 29.97 -----------------

  • 複数のファイルを読み込み、1つのファイルとして出力する方法。

    Nakanoです。いつもお世話になっております。 例えばテキストファイルを2つ用意し、1つのテキストファイルとして 出力したいのですが、いまいちやり方が分かりません。出来るのかどうかも 分からないです。(汗) 下にサンプルデータがあります。取り合えず「in1.txt」「in2.txt」 を最終的に『out.txt』の様に仕上げたいのですが… # =in1.txt AAAAA BBBBB CCCCC DDDDD 1,000 2,000 3,000 4,000 1,001 2,002 3,003 4,004 1,010 2,020 3,030 4,040 1,100 2,200 3,300 4,400 =in2.txt EEEEE FFFFF GGGGG HHHHH 5,000 6,000 7,000 8,000 5,005 6,006 7,007 8,008 5,050 6,060 7,070 8,080 5,500 6,600 7,700 8,800 # =out.txt AAAAA BBBBB CCCCC DDDDD EEEEE FFFFF GGGGG HHHHH 1,000 2,000 3,000 4,000 5,000 6,000 7,000 8,000 1,001 2,002 3,003 4,004 5,005 6,006 7,007 8,008 1,010 2,020 3,030 4,040 5,050 6,060 7,070 8,080 1,100 2,200 3,300 4,400 5,500 6,600 7,700 8,800 # ・このデータはタブで区切っています。カンマはない場合もあります。 ・ファイルの中のそれぞれの文字列の数は固定です。行数も固定です。  各文字列の中の文字数はランダムです。  COPYコマンドを利用しても考えてみたのですが、後ろに続いちゃって  上手くいかなかったです。(笑)  Perlだと1つ目のファイルの1行目を配列に入れて、次に2つ目の  ファイルの1行目を配列に入れて、これを一旦出力して、同じ手順の  様な事を行を2行目、3行目、4行目、、とずらして繰り返す。って  感じでイメージしているのですが、どの様にソースを組めばいいのか  分かりませんでした。  どなたかご教授いただけないでしょうか? 宜しくお願い致します。

  • perlかベクターなどのフリーウェアでこれはできますか?

    1.txt abc def ghi jkl mno pqr stu 2.txt mno abc 123 900 456 def stu qqq プログラム 1.txtと2.txtを比べて、1.txtに無い文字を3.txtへ書き出す。 3.txt 123 456 900 qqq Excelなら分割して何度かソートとIFを使えば解決できなくも無いのですが、今回は、行数が100万行を超えているため現実問題として無理です。 そこで、perlで行いたいのですがどのようにすればできますか? 良い方法が思いつきません。。。 どなたか、教えていただけないでしょうか? もしくは、これを解決するためのフリーウェアなどあればとても、助かります。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • Windows で ワイルドカード的検索

    Windouw Vista を使っています。 たとえば、あるフォルダー内に abc_taro_2233.txt abc_jiro_5543.txt abc_hanako_6332.txt def_taro_5566.txt ghi_jiro_4455.txt ghi_hanako_2211.txt ppp_taro_6666.txt というファイルがある時、ファイル名の中に、taro という文字列を含むファイルだけを 表示する方法はありますか? よろしくお願いします。

  • 検索した文字列がある行を検索するには

    OPEN "A.txt" QWER gohjoij OPEN "B.txt" OPEN "QWERT" Write A.txt jortyu end と書かれたテキストファイル(ファイル名を"ABC.txt"とする。)があるとします。これを 1.OPEN "*.*"(*=ワイルドカード)という文字列の*.*のみに絞る 2."1."の内" "の中に、"."が無い文字列は無視する うえでリッチテキストボックス1に出力するようにします。リッチテキストボックス1には A.txt B.txt と出力されました。これをさらに[A.txt B.txt]がある行全体を、 1.別のリッチテキストボックス(リッチテキストボックス2)に出力する やり方がわかりません。この例だと、リッチテキストボックス2には OPEN "A.txt" OPEN "B.txt" Write A.txt jortyu と出力したいです。今のスキルだと到底作れそうに無いので、どなたか教えてください。

  • 正規表現検索

    Javaのソースコード内から特定の単語を検索したいのですが、 このとき、以下の条件があります。 (1)ブロックコメント内を無視する (2)行コメント内を無視する (3)変数文字列内を無視する 01 /* 02 * ここの abc はブロックコメント内なので無視する 03 * 04 */ 05 public class Foo() { 06  private int abc = 0; 07 08  public Foo() { 09   // 行コメント内なのでここの abc を無視 10   abc = 1; 11   String s = "変数文字列内の abc これも無視"; 12  } 13 14  public String get() { 15   return " 1'23\" abc " + abc; // この場合後ろの abc のみヒット 16  } 17 } 例えば、上記のテキストで abc を検索したとき、 6、10と15行目の後ろの3箇所のみヒットさせたいのですが、 これはどのように正規表現で記述すればよいのでしょうか。 /* で始まり、*/ が記述されるまでがブロックコメントです。 // があったら、その行末までが行コメントです。 " で囲まれた中が変数文字列です。文字列内の \" は無視します。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 表示文字数で制限がありますか(初心者です。)

    エクセルのデータ(シート1枚)を表示させたのですが、文字数の制限かなにかでエラーになってしまいます。 表示するのに、文字数の制限(何行までとか、全体で何文字までとか)があるのでしょうか? 抽象的な質問で申し訳ありませんが、ご教授願います。 VBScriptでプログラムを書いています。

  • 検索文字列以外のファイル

    テキストファイルの中身を検索して、その文字列以外のファイル名を取りたいのです。具体的には、 【A.txtの中身】 123 abc 【B.txtの中身】 111 abc 【C.txtの中身】 222 abc このようなテキストファイルの中身を検索して、文字列「123 abc」以外が書かれているファイル名(つまり、B.txt、C.txt)を取得したいのですが、findstrやForなどを駆使すれば、できますでしょうか?

  • エクセルを文字数固定でテキスト形式に・・・

    エクセル97です。宜しくお願いします。 エクセルにあるデータをtxtに変換させて、別のプログラムに移したいのですが、問題なのが、受ける側で行毎に頭からの文字数で認識して読み込んでいくのですが、そのままテキスト形式で保存すると、各セルには文字数の多い少ないがある為、各行毎にそのカウントしている文字数の場所が違ってきて、読み込みも各行毎に違ってきます。これをそろえる為に各行毎に文字数を固定させて変換できないかと思っているのですが、 そこで・・・ 列毎に、文字列のある列の文字数を決めておいて、その文字数に満たない場合は、その満たない数だけスペースを入れて変換したいのですが・・・すみません、説明がいまいちですが・・・ 例えば・・・ *A列は文字数を6文字と決める。 *そのA列には、文字列が各行のセルに「あいう」「あいうえお」「あい」などの文字列があります。 *テキスト形式に変換されたときに、 ・「あいう」→「あいう___」 ※(_はスペース) ・「あいうえお」→「あいうえお_」 ・「あい」→「あい____」 と変換させたい。 説明もなんだかへたくそで、ちょっと難しいと思いますが、どなたか良い方法を知りませんか?非常に困っています。宜しくお願いします。

専門家に質問してみよう