dポイントプレゼントキャンペーン実施中!

data.txtというファイルがあります。下記のような感じです。
2005/12/01,0:40:55,7.8
2005/12/02,0:41:55,7.8
2005/12/03,0:42:55,7.8
2005/12/04,0:43:55,7.3
2005/12/05,0:44:55,7.3
2005/12/06,0:45:55,7.8
2005/12/07,0:46:55,7.8
2005/12/08,0:47:55,7.8
     ・
     ・
です。
たとえばこの中から検索値(yyyy/mm/dd)2005/12/01を含む行から2005/12/04を含む行の間すべてを読み出してsend.txtというファイルに保存する方法を教えてください。
検索値が2005/12/01と2005/12/06だとするとsend.txtは下記のようになります。
2005/12/01,0:40:55,7.8
2005/12/02,0:41:55,7.8
2005/12/03,0:42:55,7.8
2005/12/04,0:43:55,7.3
2005/12/05,0:44:55,7.3
2005/12/06,0:45:55,7.8
検索値の変数は前が$nameで後が$name2です。

A 回答 (3件)

# こんなんどうでしょう。



open DATA, "< data.txt";
open OUT, "> send.txt";

my $name = '2005/12/01';
my $name2 = '2005/12/06';

$name =~ s{/}{}g;
$name2 =~ s{/}{}g;

foreach (<DATA>){
my $date = (split(',',$_))[0];
$date =~ s{/}{}g;
if ($date>=$name&&$date<=$name2){
print OUT $_;
}
}

close DATA;
close OUT;
    • good
    • 0

#2のプログラムは、一行ごと違う日付であると想定していることに注意。


2005/12/06,0:45:55,7.8
2005/12/06,0:45:56,7.8
のように終わる日付が複数有る場合、
一つめで書き出し終了してしまいます。
    • good
    • 0

$name="2005/12/01";


$name2="2005/12/06";
open(IN, "data.txt");
open(OUT, ">send.txt");
while(<IN>){
print OUT if /$name/../$name2/;
}
close(OUT);
close(IN);
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!