- ベストアンサー
perl 読込ファイルの分割について
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
1)読んだ行が区切られる単位なのか、要素なのかを分けて、 2)指定されたファイル名でオープンしたり、出力が終わったらクローズしたり を割とそのまま書けばよいかと思います。 # 質問文中ではコロンやスペースが全角なのでそのつもりで書いてあります my $items = 0; # これからファイルに出力する行数 while (<>) { if ($items == 0 && /:/) { # :の行が区切られる単位とし、 chomp; my ($name, $num) = split(/:/); $num =~ s/ //g; # 全角スペースが入っているようなので消しておく $items = int($num); # :の後の数字がそのグループに入る要素数である。 print "$name, $items\n"; open OUT, ">$name" or die "Cannot open $name..."; }elsif ($items > 0) { # データ数分出力 print OUT $_; if (--$items == 0) { # 最後の項目だったら close OUT; # ここでおしまい } } } # 最初の if に $items == 0 が入れてあるのは、項目にコロンが入っていたらハマるからですが、 # 先に if ($items > 0) { ... } elsif (/:/) { ... } と書けば条件式はシンプルになります。 # ここでは(データファイルの出力順に合わせて)グループ名の指定かどうか判定する方を先にしました。
関連するQ&A
- テキストファイルを読み込むには・・・。
テキストファイルの中身が以下のように abcd,efg,hij,klmn↓ opqr,stu,vwx,yzab↓ cdef,ghi,jkl,mnop↓ . . . . のように何行あるか分からない状態で1行ずつ,と\0で区切って4つの文字列を取り出したい(上のテキストファイルの1行目だと[abcd][efg][hij][klmn]のように)のですがどのようにすればいいのでしょう?できれば余分なメモリを確保するやり方を避けたいです。
- ベストアンサー
- C・C++・C#
- perlプログラム 外部複数ファイルの読み込み処理について
perlプログラム 外部複数ファイルの読み込み処理について あるフォルダに T0001_05_01,T0001_05_02,T0001_05_03,…,T0001_05_31 という31個のファイルがあります。 それぞれのファイルは 下記のような 形式で記述されております。 (例 T0001_05_01のファイルの中身) 2010-05-01 00:00:00.000 N00001 AAAAAA 2010-05-01 00:00:00.108 N00018 BBBBBB 2010-05-01 00:00:10.305 N00002 AAAAAA 2010-05-01 01:00:10.966 N00008 CCCCCC … また、別のlist.txtに 下記のようなユニークなリストが入っております。 AAAAAA CCCCCC WWWWWW … このとき、list.txtの値が それぞれT0001_05_XXファイルの何行目に出力されているか 出力するperlプログラムを作成したい。 (出力結果イメージ:1ファイル化) T0001_05_01 1行目 2010-05-01 00:00:00.000 N00001 AAAAAA T0001_05_01 3行目 2010-05-01 00:00:10.305 N00002 AAAAAA … T0001_05_31 10行目 2010-05-31 03:00:00.999 N00400 AAAAAA T0001_05_01 4行目 2010-05-01 00:00:00.000 N00008 CCCCCC … perlプログラム知識がないものなので、このようなファイルの出力の仕方がわかりません。 教えていただけると助かります。
- ベストアンサー
- Perl
- perlで指定範囲を複数ファイルに分割する方法は?
お世話になります。 perlを使用して、 下記の元ファイル[infile.txt]よりstart~endの範囲を各テキストファイルに 分割出力する方法をご教授いただけないでしょうか。 ※出力ファイル名は元のファイル名 (infile) + 1行目の文字列(単語)にします。 例>>infile_1111.txt , infile_333.txt よろしくお願いいたします。 [infile.txt] aaaa bbbb start 1111 2222 end dddd eeee start 3333 4444 end
- 締切済み
- Perl
- ファイルをある文字列で分割したいです。
数百MBの1つのログファイルがあります。 これを月ごとのファイルに分割しようと思ってます。 大きすぎて既存環境のviでは開けないので、コマンドやスクリプトで分割しようと考えてます。 とりあえず今年の3月(Mar)~7月(Jul)と5つ月ファイルに分割できればいいです。 perlで1行ずつチェックしようかと思ってましたが、 間違いなくもっと簡単に処理できるかと思い投稿しました ^ ^;; シェルはcshです。 よろしくお願いいたします。
- ベストアンサー
- その他(OS)
- Perlでのテキスト変換方法に関して
テキストファイルをperlを使用して下記のように 変換したいと思っています。 --------------------------- 【変換前】 aaa 8000 52 ---1行目 abc 200 48 ---2行目 cbd 250 31 ---3行目 efg 98 45 ---4行目 abc 390 68 ---5行目 ddd 89 90 ---6行目 aaa 65 40 ---7行目 fed 900 66 ---8行目 efgh 99 49 ---9行目 abc 40 40 ---10行目 【変換後】 aaa 8000 52 ---1行目 cbd 250 31 ---3行目 efg 98 45 ---4行目 abc 390 68 ---5行目 ddd 89 90 ---6行目 fed 900 66 ---8行目 efgh 99 49 ---9行目 ---------------------------- やりたいことはまず行の先頭文字列(aaaやabc)が完全に一致する行が 複数あれば(2,5,10行目のabcや1,7行目のaaa)、2番目の文字列(スカラー値)の値が 小さい方の行は出力しないようにしたいと思っています。 例えば上記の場合ですと、2,5,10行目の最初の文字列はaaaで完全に一致しており、 2番目の列の値は5行目が390に対し、2行目は200、10行目は40と小さくなっているため 2行目,10行目は出力されない、というのが望んでいる動作です。 sortを使用してどうにかならないかとも、考えたのですが そこから先がどうしていいか思いつきませんでした。 何かよい方法を思い浮かぶ方がいましたら、どのようにPerlで記述すればよいのか 教えて頂けないでしょうか? 宜しくお願いいたします。
- ベストアンサー
- Perl
- Perl はどのくらい高負荷に耐えられますか?
掲示板の運営をしているのですが、 将来アクセスが増えた時に備えて、 高い負荷に耐えられるようなCGIにしたいと思っています。 ちなみに現在はPerlで記述しています。 一つのCGIでいろいろ対応しているので、 ボリュームは2000行(70KB)くらいになっています。 そこで質問なのですが、 (1)Perlで記述したCGIはどの程度の負荷に耐えられるのでしょうか? (ちょっと漠然としていて申し訳ありません) (2)軽くするにはどういう事を検討すればよいでしょうか? (PHPにするとか、Cで書くとか、CGIを分割するとか)
- ベストアンサー
- CGI
- perlでの別ファイルへの出力について
perlでファイルAから読み出した値を別ファイルBに出力させたいです。 イメージとしては -------------------------------- open(FILE,ファイルA); while(<FILE>){ my $line = "$_"; system("ls -l $line"); #←ここの結果を1行ずつファイルBに出力したい } close(FILE) --------------------------------- 上記の場合どのように記述すれば良いのでしょうか? bashでは簡単にかけるのですが、 業務上perlを使用する必要がある為こまっております…。
- ベストアンサー
- Perl
お礼
1行1行 何をやっているか説明いただき、ありがとうございます。 まさに このような方法でやりたかったので、これを参考にし、実行してみます。