- ベストアンサー
差分ファイルを読み込んで解析する
刻々とデータが積み重なっていくファイルを、 任意のタイミングで読み取り、解析コードに通す。 データ取得はそれと平行して続いており、 次のタイミングで行う解析では、 以前と比べて新しく取得された部分のデータだけを通す…… ということをC言語を中心としたプログラムで行いたいのですが、 何か良い方法はないでしょうか。
- みんなの回答 (13)
- 専門家の回答
質問者が選んだベストアンサー
データを積み重ねたファイルのレコード件数が一定数 以上になったら、解析用に移す為のファイル名に変更 蓄積用ファイルは0件からデータの蓄積を再開。 解析用プログラムは解析用ファイルができるのを検知 して解析処理を実行して、終了したら解析ファイルを 削除または全データの累積ファイルに追加というのは?
その他の回答 (12)
- don_go
- ベストアンサー率31% (336/1059)
>理想は自分の好きなタイミングなんですよ。 タイミングを合わせるのなら、解析プログラムから データ要求を受けた時も取得データを解析用データ に移す様にすれば任意の時点でのデータ取得が可能 になります。 データの要求、受信確認、データ処理中等で互いの プログラムが同期を取る必要が有ります。 #簡単な通信プロトコルの様な物を使用
お礼
アドバイスを参考にして、一定時間が経過したら保存するファイルを変える、 という方法をやってみました。 互いのプログラムが同期を取る…… というのは難しかったので断念したのですが、 ファイルを分割するタイミングをこまめにすることで、 だいたい希望通りの振る舞いが実現できました。 回答ありがとうございました。
- Bonjin
- ベストアンサー率43% (418/971)
ログファイルの様にファイルの最後尾に追加されていくだけなら、最後に読み込んだオフセット(ファイルの最後尾の位置)を覚えておいて次に読み込む時はそこから読み込めばいいですよね。 ファイルの内容が上書きされていくならファイル内のフォーマットなどに依存するので何とも言えません。 >刻々とデータが積み重なっていくファイル をもう少し具体的に書くと的確なアドバイスがもらえると思いますよ。また、ファイルを更新していくプログラムは既存(書き換え不可)なのか新規に作成するものなのかも書いた方がよいです。
お礼
オフセットを記憶して、そこから読み込む方法、完成できました。 そういう手法をランダムアクセスなどと呼ぶそうですが、 テキストでもバイナリでも関数の扱いはほとんど変わらないんですね。 回答ありがとうございました。
補足
生成されるファイルは、ログファイルのように追加されていくだけのはずです。 ただバイナリファイルなので、ちょっと自分の理解が追いついていないため (テキストファイルなら簡単なので分かるのですが) オフセットの記憶などを実現できるかどうかが不安です (でも確かに、途中からデータを読めるならそれが確実ですね)。 ファイルを更新するプログラムは既存のものですが、 自分で手を加えることも可能です。
- 1
- 2
補足
なるほど、ファイルを作るそばから 変更していくとは思いつきませんでした。 比較的容易に実現できそうですが、 理想は自分の好きなタイミングなんですよ。 それでも、タイミングは本質的に重要な部分ではないし、 うまく使えば活用できそうなアイデアですね。