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

現在、リアルタイムでセンサーで値を取得してそれをファイルに書きだすと同時にgnuplotで描画するwindows(VC++)プログラムを作っております。

手順としては
(1)ADCの装置から値が送信されるのでそれを取得
(2)fprintfでデータ書き出し
(3)gnuplotでグラフを作る
ということをやっています。

データの書き出し、リアルタイムでのグラフ表示はできるようになったものの、グラフを作る際、データがそれまで取った値全てのデータでグラフを作ってしまうので非常に膨大なデータをプロットしてしまいます。

そこで、「最新の1000個だけをプロットする」ようなことをしたいのですが、このとき、データを保存するファイルとは別に、一時ファイルを作り最新の1000個のデータをその一時ファイルに書き込みそれをplotすることを考えました。(1秒おきに、最新のデータが一番後ろの行について、1000個前のデータが削除される)
しかしながら、「最初の行(1000個前のデータの行)を削除する」というところでどう実現すれば良いのか分からなくなってしまいました。

ご存じの方いらっしゃいましたら教えていただきたいです。
どうぞよろしくお願い致します。


===== 一時ファイル ======
#a   b
a0    b0    ←ここの行を削除したい!
a1    b1
   ・
   ・
   ・
a999 b999
a1000 b1000  ←ここが追加される

A 回答 (3件)

「常にファイルに書く」のは処理コストも高いですから1000個のリングバッファで処理する方がいいんじゃないでしょうかね。


これなら常に最新の1000個分のデータが出ることになります。
あとは下記URLを参考にして標準入力に突っ込んでやれば良さそうです。
http://d.hatena.ne.jp/tanakaBox/20070826/1188078 …
    • good
    • 0
この回答へのお礼

どうもありがとうございます。

手動入力もできるとは!
リングバッファも今ちょうど調べていました!
これで完ぺきにできそうです
どうもありがとうございます。

お礼日時:2011/05/05 21:43

書きだすデータ量、タイミングがシビアなら使えませんが


GnuWin32などのtailコマンドを定期的に実行して、一時ファイルにリダイレクトしてはどうでしょう。
    • good
    • 0
この回答へのお礼

GnuWin32ですか。少し私には難しいです><
ごめんなさい。勉強します。

お礼日時:2011/05/05 21:40

読み込み行数カウンタを設けインクリメント。


指定範囲の場合のみ出力。

では?

一定時間ごとに出力ファイルを閉じ新たに開くことで出力ファイルそのものを変えるのも手かも。

この回答への補足

どうもありがとうございます。

実はgnuplotの数値データのplotの仕様で、
あるファイルを開いて最初の行からプロットするみたいで、困っております。
(途中からプロットするコマンドはなく、ファイルを通さず直にデータを送ることもできない)


どうぞよろしくお願い致します。

補足日時:2011/05/05 19:48
    • good
    • 0
この回答へのお礼

どうもありがとうございました

お礼日時:2011/05/05 21:38

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