データの整形に関する質問

このQ&Aのポイント
  • 1分毎のデータを処理している中で、データが抜けてしまうことがあります。この問題を解決するために、どのようなプログラムを書けば良いでしょうか?
  • 具体的には、時間とデータのペアが以下のように与えられている場合、データを1分毎の時系列に整形したいと考えています。
  • お力添えいただければ幸いです。
回答を見る
  • ベストアンサー

データの整形について

1分毎のデータが入ったテキストを処理しているのですが、たまに10~15分ほどデータが抜けています。これをデータの有る無しに関わらず1分毎の時系列に並べたいのですが、Perで処理するにはどういったプログラムを書けばよろしいでしょうか? 具体的には 2009/4/1 20:21, abcdef 2009/4/1 20:25, ddeffg といったデータであれば、 2009/4/1 20:21, abcdef 2009/4/1 20:22, 2009/4/1 20:23, 2009/4/1 20:24, 2009/4/1 20:25, ddeffg という様な形に直したいという事です。 どうかよろしくお願い致します。

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

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

Time::Local を使えば、日付表示文字列から、エポック値(通算秒)が得られます。 あとは、行を読み込んだ時に、前行のエポック値との差が60を超えているようだったら、その間を60間隔でループして空データ出力するようにすればいいでしょう。 --- #! /usr/local/bin/perl use strict; use Time::Local; my $previous = 0; while (<>) { my ($year, $month, $day, $hour, $minute) = m|^(\d{4})/(\d{1,2})/(\d{1,2} )\s+(\d+):(\d+),|; my $current = timelocal(0, $minute, $hour, $day, $month-1, $year); if ($previous > 0) { for (my $t = $previous + 60; $t < $current; $t += 60) { my (@l) = localtime($t); printf("%04d/%d/%d %02d:%02d,\n", $l[5]+1900, $l[4]+1, $ l[3], $l[2], $l[1]); } } print ; $previous = $current; } ---

tivi_cro
質問者

お礼

試してみたところ一瞬で出来ました。的確な回答ありがとうございました。

関連するQ&A

  • PHPを使ってデータの抜き出し

    PHPを使って、MySQLに接続してデータを抜き出し テキストファイルに書き込むというプログラムを作りました。 そこで問題があります。 '480' "あああ"というデータがあるんですが、 そのまま抜き出されてしまいます。 \'480\' \"あああ\"といった形で抜き出したいです。 どうか宜しくお願い致します

    • ベストアンサー
    • MySQL
  • 複数のファイルからのデータの平均を求める

    c言語でファイルの読み取りに関する処理を行うプログラムを作っています。具体的な内容としては、いくつかのテキストファイルに数値が記されていて、それを読み込んで読み込んだ枚数分で平均を求めてくれる物を作りたいと思っています。平均の計算自体は分るのですが、読み込んだ数値をどう扱うかで詰まっています。二次元配列の列ごとにそれぞれのテキストファイルからの数値を入れていって要素ごとで平均を取るような形にすれば良いかなとは思っているんですが、うまく行きません。どなたかアドバイスをください。よろしくお願いします。

  • MDBファイル(Access)からデータを取得できなくて、困っています…

    Visual studio 2005(C#を使っています)で、mdbファイル(Access)のデータを取り込むプログラムを組もうとしているのですが、上手くいかなくて困っています。 具体的には、 (1)mdbファイルに接続 (2)mdbの1行分の複数のデータを配列にそれぞれ格納 (3)格納したデータ(数値)をグラフ上にプロット というプログラムです。教えて頂きたいのは、(1)と(2)を実現するプログラムです。何冊かテキストを読み、書かれていたサンプルプログラムを打ち込んでみたんですが、どうも上手くいきません。 宜しくお願い致します。

  • 整形したテキストの行を集計する方法

    Perlでテキストデータの集計を行いたいのですが、集計のプログラムが上手く作れずに困っています。 元のテキストとして、 あいうえお。かきくけこ。さしすせそ。たちつてと。あいうえお。 というものがあり、整形プログラムとしては、 while(<>){ s/。/。\n/g; print"$_"; } があります。このプログラムを使って、 あいうえお。 かきくけこ。 さしすせそ。 たちつてと。 あいうえお。 という形に整形ところまではできたのですが、上記のプログラムに追加する形で、 あいうえお。 2 かきくけこ。 1 さしすせそ。 1 たちつてと。 1 というように同一の行の集計を行えるようにしたいです。 元のテキストデータから整形と集計を1つのプログラムで行えるようにしたいのですが、どうすれば良いのでしょうか?

    • ベストアンサー
    • Perl
  • 原油相場(WTI)の時系列データ

    原油相場(WTI)の時系列データ があるでしょうか。 グラフは沢山あるのですが、テキストデータを御存じの方 教えて下さい。 宜しくお願い致します。

  • データ未入力時のエラー処理がうまくできません・・・

    現在、JSPファイルを作成しています。その内容は、HTMLで表示されたテキストボックスにデータを入力し、 次のページでそのデータを表示させるものです。 データが未処理の場合のJavaのプログラムは、以下のようになります。 if(txtInpA == "") { データが未入力時のエラー処理 }else{ データが入っているときの処理   } *「txtInpA」にデータが入っています。 しかし、このプログラムだと正常に処理してくれません。 「""」の代わりに「null」としても同じです。 また、データを取得するメソッド「request.getParameter()」を使っても 同様にうまく処理をしてくれません。 なにかよい方法があればぜひ教えてください。お願い致します。

    • ベストアンサー
    • Java
  • セル内のデータ処理(時刻)について

    あるデータベースから時刻のデータを引き出すと“23:45:23-45(23時45分23秒で゛-45゛は100分の1秒単位)”のようなカタチでデータが引き出されるんですけど、これをエクセルで処理する場合に゛-45゛が非常に邪魔なんです。それぞれのデータから各時刻の差を導いて、データを処理したいんですけど、゛-45゛(1/100秒単位)の付いたままのカタチで処理が難しい・・・。上手く処理する方法ないですかぁ????

  • 出来るだけ細かいドル円の時系列データを取得したい

    宜しくお願い致します。 ただいま、FXの投資を検討している者なのですが、 取引を行うに当たって、出来るだけ過去のデータを 分析して臨みたいと考えています。 そこで、過去の時系列データを取得したいのですが、 例えば、下記のヤフーのような時系列のデータを、 出来る限り細かく提供している所はございませんでしょうか? 無料・有料は問いません。取得したい通貨ペアはUSD/JPYのみです。 http://stocks.finance.yahoo.co.jp/stocks/history/?code=998407.o 出来れば、過去3年くらい遡って1分毎のデータを取得したいですが、 無ければせめて1時間毎のデータを手に入れたいです。 ファイルメーカーやAccess、エクセル等でデータを取り込んで 分析に使いたいのでテキスト文章で提供している所が希望です。 何卒宜しくお願い申し上げます。

  • VBAでYAHOO株価の時系列データ読み込みでのエラー

    YAHOOの時系列データを見込ませていたら、何度も読み込ませていると、うまく読み込む時と、読み込まない時があります。一度でもうまく動いていたプログラムが回数によって問題を起こす事などはあるのでしょうか?

  • データの更新が認識されない

    とあるプログラムで使用するテキストデータを作っていた時に遭遇した疑問です。そのテキストデータが原因でプログラムが動かなかったのですが、具体的にはエンコードを方式が違うとのことでした(内容は問題ありません)。そこでエンコードを正しいものに変換したのですが、動きません。しかしなんらかの変化(文字を入力する、あるいは消す)を加えると動きました。ところがアンドゥや逆の変化(入力した文字を消す、あるいは消した文字を元の場所に再入力する)を加えて先ほどのプログラムが動かなかった時と全く同じ状態に戻すと、また動作しなくなりました。以下のような状態です。 (プログラム)   (テキストデータ)  動かない     エンコードが間違っている  動かない     エンコードを直す(ここで動くはず)  動く         変化を加える  動かない     逆の変化を加えて2番目の状態と同じにする なぜエンコードを直した時に動かないのでしょうか? なぜ変化を加え、元に戻すと動かないのでしょうか? 自分の予想としては、エンコードを直した時に動かなかった前者の理由は分かりませんが、何らかの理由でデータに更新があったことを認識できず、変化を加えたことでやっと認識できたのではないかと思います。元に戻すとまた動かなくなるのは、テキストデータの編集開始時に一時記憶領域のような場所にデータがキャッシュされ、更新後も同じ内容だと新しいデータとして保存するのではなく、キャッシュを用いて「編集自体がなかったことにされている」からではないかと思います。 もし万が一私の予想が当たっていても、後学の為に専門的に補足していただけると助かります。