![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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プログラム知識がないものなので、このようなファイルの出力の仕方がわかりません。
教えていただけると助かります。
No.2ベストアンサー
- 回答日時:
サンプルプログラムを作成してみたので試してみてください。
テストしていないのでうまく行かないことがあるかも知れません。
use strict;
open FH, "list.txt" or die "Can't open list.txt: $!";
my @keyword = <FH>; chomp @keyword;
close FH;
my ($day, @result) = ('00');
while (++$day lt '32') {
my $file = "T0001_05_$day";
open FH, $file or die "Can't open $file: $!";
while (my $line = <FH>) {
foreach my $i (0 .. $#keyword) {
if ($line =~ /$keyword[$i]/) {
push @result, [$i, "$day", $., "$file ${.}行目 $line"];
last;
}
}
}
close FH;
}
@result = map { $_->[3] } sort { $a->[0] <=> $b->[0] || $a->[1] cmp $b->[1] || $a->[2] <=> $b->[2] } @result;
open OUT, ">out.txt" or die "Can't open out.txt: $!";
print OUT @result;
close OUT;
No.3
- 回答日時:
まだ解決しませんか?
もしLinux なら grepの方が楽かも。(windowsでは不可です)
以下を データT0001_05~ファイルとlist.txtと同じ場所において
パーミションを705にして実行してください。
------------------------------------- ○○.cgi
#!/usr/bin/perl
$| = 1;
print "Content-type: text/html\n\n";
@files = glob("T0001_05_*");
open(IN,"list.txt");@keys=<IN>;close(IN); chomp @keys;
foreach(@keys){
print "<b>$_</b><br>\n";
@result = `grep -n "$_" @files`;
foreach(@result){
split(/:/,$_,3);
print "@_[0] @_[1]行目 @_[2]<br>\n";
}
print "<hr>\n";
}
exit;
--------------------------------------
htmlで出してます。適宜ブラウザ上でコピーしてください。
ボリュームが多く何百万行もあるため、grep実行はすでに試みたのですが、処理時間がかかってしまいました。プログラム初心者のため このプログラム内容は今後の参考にさせていただきます。ありがとうございます。
No.1
- 回答日時:
まず、それらのファイルが保存されているディレクトリを開く。
list.txtがあれば、それを開いてAAAAAなどのハッシュを作っておく。
ディレクトリにあるファイルの一覧を取得する。
それらを順番に開いて、そのファイルごとに一行ずつパターンマッチを行う。
AAA・・があれば、そのハッシュに、行数とその行のデータを配列で追加していく、
配列のハッシュを作成する。
最後に、書き込み用ファイルを開いて書き込む。
たとえば、
$hash{'AAAAAA'}=[(T0001_05_01,1,2010-05-01 00:00:00.000 N00001),
(T0001_05_01,3,2010-05-01 00:00:10.305 N00002)
]
とか、メモリーを消費するのでSEDなどストリームエディタを使うほうが早くて良いのだろうけど・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
perlプログラム 外部複数ファ...
-
Pythonでegrep機能をつかいたい
-
Pythonで非日本語のUnicode文字...
-
awkスクリプトでダブルクォーテ...
-
batファイルでrenameができませ...
-
VBA テキストファイルを読み取...
-
教えて!perlから.exeファイル...
-
Firefox で file:// で始まる U...
-
csvファイルの横方向への改行に...
-
MPLABにおけるsyntax errorに...
-
Perlの変数に文字数制限(容量...
-
ディレクトリ内CSVデータをすべ...
-
複数ファイルの読み込みについて
-
fopen64について
-
ファイル内の日付から1週間前...
-
パスから最後のディレクトリだ...
-
cgiのログの書き方
-
デルファイ TabControl タブの...
-
csvファイル改行コードの置換に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「パスが見つかりません」とい...
-
ファイル名を複数個配列で確保...
-
perlで先頭の数値をみて昇順に...
-
Perl エラーログを指定の場所...
-
Pythonでegrep機能をつかいたい
-
Visual Basicを使って三平方の...
-
perlでCSVをソートする方法につ...
-
ifstream を利用した1行分のテ...
-
Pythonで非日本語のUnicode文字...
-
perlプログラム 外部複数ファ...
-
Perlによるディレクトリ内の連...
-
system関数と引数について
-
C++でのテキストファイル読み込...
-
Perlのワンライナーをスクリプ...
-
Perl 重複カウント 上位3名
-
バッチファイルでテキストファ...
-
perlで指定範囲を複数ファイル...
-
一行だけ読込
-
Fortranで1行飛ばして読み込む方法
-
perl 計算結果をファイルへ出力...
おすすめ情報