• ベストアンサー

あるファイルないから日付指定して検索その日付の行のものを別のファイルに保存

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です。

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

  • ベストアンサー
  • SE-1
  • ベストアンサー率57% (26/45)
回答No.1

# こんなんどうでしょう。 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;

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2のプログラムは、一行ごと違う日付であると想定していることに注意。 2005/12/06,0:45:55,7.8 2005/12/06,0:45:56,7.8 のように終わる日付が複数有る場合、 一つめで書き出し終了してしまいます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

$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);

関連するQ&A

専門家に質問してみよう