• ベストアンサー

差分ファイルを読み込んで解析する

刻々とデータが積み重なっていくファイルを、 任意のタイミングで読み取り、解析コードに通す。 データ取得はそれと平行して続いており、 次のタイミングで行う解析では、 以前と比べて新しく取得された部分のデータだけを通す…… ということをC言語を中心としたプログラムで行いたいのですが、 何か良い方法はないでしょうか。

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

  • ベストアンサー
  • don_go
  • ベストアンサー率31% (336/1059)
回答No.1

データを積み重ねたファイルのレコード件数が一定数 以上になったら、解析用に移す為のファイル名に変更 蓄積用ファイルは0件からデータの蓄積を再開。 解析用プログラムは解析用ファイルができるのを検知 して解析処理を実行して、終了したら解析ファイルを 削除または全データの累積ファイルに追加というのは?

hiro2pzbt
質問者

補足

なるほど、ファイルを作るそばから 変更していくとは思いつきませんでした。 比較的容易に実現できそうですが、 理想は自分の好きなタイミングなんですよ。 それでも、タイミングは本質的に重要な部分ではないし、 うまく使えば活用できそうなアイデアですね。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (12)

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.3

>理想は自分の好きなタイミングなんですよ。 タイミングを合わせるのなら、解析プログラムから データ要求を受けた時も取得データを解析用データ に移す様にすれば任意の時点でのデータ取得が可能 になります。 データの要求、受信確認、データ処理中等で互いの プログラムが同期を取る必要が有ります。 #簡単な通信プロトコルの様な物を使用

hiro2pzbt
質問者

お礼

アドバイスを参考にして、一定時間が経過したら保存するファイルを変える、 という方法をやってみました。 互いのプログラムが同期を取る…… というのは難しかったので断念したのですが、 ファイルを分割するタイミングをこまめにすることで、 だいたい希望通りの振る舞いが実現できました。 回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.2

ログファイルの様にファイルの最後尾に追加されていくだけなら、最後に読み込んだオフセット(ファイルの最後尾の位置)を覚えておいて次に読み込む時はそこから読み込めばいいですよね。 ファイルの内容が上書きされていくならファイル内のフォーマットなどに依存するので何とも言えません。 >刻々とデータが積み重なっていくファイル をもう少し具体的に書くと的確なアドバイスがもらえると思いますよ。また、ファイルを更新していくプログラムは既存(書き換え不可)なのか新規に作成するものなのかも書いた方がよいです。

hiro2pzbt
質問者

お礼

オフセットを記憶して、そこから読み込む方法、完成できました。 そういう手法をランダムアクセスなどと呼ぶそうですが、 テキストでもバイナリでも関数の扱いはほとんど変わらないんですね。 回答ありがとうございました。

hiro2pzbt
質問者

補足

生成されるファイルは、ログファイルのように追加されていくだけのはずです。 ただバイナリファイルなので、ちょっと自分の理解が追いついていないため (テキストファイルなら簡単なので分かるのですが) オフセットの記憶などを実現できるかどうかが不安です (でも確かに、途中からデータを読めるならそれが確実ですね)。 ファイルを更新するプログラムは既存のものですが、 自分で手を加えることも可能です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXEファイルの解析

    ちょっと前に日本語プログラム言語「なでしこ」を使用して作成したEXEファイルですが… 何の実行ファイルかわからくなりました。 あと、修正もしたいので解析できるフリーソフトがあれば、紹介していただきたいです。 よろしくお願いいたします。

  • ファイル操作について、テキストファイルの書き換え

    よろしくお願いします。 データファイルAからデータを取得して、テキストファイルBの内容の一部を取得したデータで書き換えるという操作を行うプログラムを作りたいです。 具体的には、 データファイルA[A.txt]の中身 111 222 333 444 テキストファイルB[B.txt] 文字列1="123" 文字列2="234" 文字列3="345" 文字列4="456" というような二つのファイルを読み込み、B.txtの""で囲まれた部分を、A.txtで取得したデータで置き換えるような操作を行いたいのですが・・。 使用する言語としてはスクリプト言語であるperl、もしくはプログラム作成経験があるCを使用しようと思っています。(perlは未経験で入門書を読んでいるレベル)

    • ベストアンサー
    • Perl
  • Visual Basicでファイル内の文字コード変換をしたいのです。

    こんばんは。どなたかアドバイスをお願いいたします。 実は、次の内容のプログラムをVisual Basic5.0を使って作成しようとしています。 (1)EBCDIC→JISへのコード変換(汎用機用のデータをパソコンで使用するため) (2)上記データ内に含まれるパック数字をアンパック数字に変換 (3)対象のデータをCSVファイルに書き込む ※使用する汎用機、パソコンは両方ともNEC製です。 データ数が多いことと、桁数の異なるレコードが結合されて1つのファイルとなっているため、コンバートソフトは使用できませんでした。 実は、上記(1)~(3)を行うプログラムがあるのですが、作成者が知らないうちに変更してしまったらしく、動かなくなっていました。作成者は現在すでに退職しており連絡も取れません。そのプログラムはVisual C++で作成されているため現在の私の力では解析して変更点を直すができませんでした。急を要するためVisual C++を勉強して解析するか、Visual Basicで作り直すかの選択を迫られている状態です。プログラム言語により処理が可能なものと不可能なものがあると聞いたことがあるのですが、Visual Basicで作成できればそちらに切り替えたいと考えています。長文になり申し訳ありません。何卒よろしくお願いします。

  • 入力ファイルの解析

    fp=fopen(ex1.cpp,"r"); によって、開いたCソースファイルを解析してコンパイルエラーがあるかを確かめるプログラムを作成するにはどうすればいいのですか?

  • 別ファイルの内容を検索したいのですが、(超初心者です)

    現在、独学でC言語を勉強しているのですが、 別のファイル(.dat)にあるデータの内容を 該当するデータだけ表示させたいのですが、 どうやったらできるのかわかりません。。 例えば、、、 別ファイルの内容が、 145556 1 C言語 256885 2 C言語その1 456789 3 C言語その2     : という風になっていたとして、 プログラム実行中に 145556 と入力したら C言語 と表示されるような 行ごとに入力されたデータの最初の6桁を検索して 必要な部分だけを表示することはできるのでしょうか? もし、できるのであれば どのようにプログラムを作成すればいいのか教えてください! そして、勝手なのですが、勉強中なので  どうして そうなるのかも教えて欲しいのです。 よろしくお願いします。

  • 音を解析???

    専門学校生です。 PICNICを使った課題が出されました。 PICNICを使ったものなら何でもよく、音声処理に興味があるので、音関連のものを作りたいと思っています。 そこで次のようなものを考えたのですが、作れるものなのかどうかを教えていただきたいです。(一番プログラムが不安です) マイクに人の声でドレミと入力したら、スピーカーから楽器の音でドレミと出てくるもの作りたいと思います。 詳しく説明しますと、ドレミという音の高さの声をマイクに入力。その音をPCで解析し、スピーカーから楽器の音でドレミと出てくるようにしたいです。 PICNICも使わなければならない課題なので、どこかで使わないといけません。(マイクもしくはスピーカーと、PCの間にでも使おうかと) 音を解析するにはプログラムを使って、入力音声を、ある周波数ごとに区切りそれを出力しようと思います。 C言語で簡単なソート、リストのプログラムくらいは作れます。C言語を習って来たのですが、別の言語のほうが作りやすそうならそちらの言語を学ぼうかと思います。 四人一班で、製作時間は長くて30時間~40時間くらいの予定です。 そこで質問です。 (1)このようなものは自分たちに作れそうですか?  無理そうなら他のものを作ろうかと思います。 (2)プログラミング言語としてはどのような言語がいいでしょうか?  プログラムもどこから手をつけていいかまったくわかないので、手のつけ方を教えていただきたいです。 (3)作成にあたってアドバイスなどお願いします。  参考になりそうなサイト、書籍等があれば教えていただきたいです。

  • web上のhtmlファイルから文字データを取得するには

    c言語を勉強中の初心者です、 自分が今作りたいプログラムはweb上のhtmlにある文字データを取得し、 整理し、プログラム内で表示するような物ですが、どの本を読んでもweb上からデータを取得する方法が紹介されていません、(見つけられないだけかもしれませんが…) 例えば、yahooの株情報からデータを取得するソフトなんてのはよくありますよね? こういった方法は何か凄く特殊なのでしょうか? 一般的にこういった事をプログラミング用語で何と呼ぶのかすらわからないので、検索で調べようがありません… ただweb上のhtmlファイルから文字列を取得したいだけです、 コードの例などを紹介している書籍やwebページを教えてください よろしくお願いします。

  • 大容量のテキストファイルの内容を解析について

    10000行1GBほどの大容量のテキストファイルの内容を解析しようとしています。 このテキストファイルは約20行で一塊のデータが入っており、次の20行からまた一塊のデータがはいっています。現在、全行を1行ごとにArrayListに格納してから 各行にキーワードが含まれていないかチェックし、含まれていたらそのデータの塊の中にある2行目を行を出力しようとしています。 しかし、10000行のArrayListを宣言しようとしたところ、途中でOutOfMemoryになり、メモリ不足になります。そこで、最初の20行を読み込み、処理をし、次の20行を読み込み処理をする・・・と考えているのですが、このようなことをJAVAのソースコードで実現することは可能でしょうか?? 皆さんは大容量ファイルを解析するときにどのような手法をとっていますか? ご教示いただければ幸いです。

    • ベストアンサー
    • Java
  • ファイルの置換えはできますか?

    以前、自分以外の人がC言語でプログラムを作って、 C言語のソースファイルなのですが それを内容はそのままでC++のソースファイルに置換える事は可能でしょうか?

  • ゲームの解析のプログラムについて

    自分は、C#でパソコンのゲームの改造コードを解析するプログラムを作成しています。 ただ、そこでわからないことがありまして まずROMを読み込んで、動いているメモリアドレス(16進数)を検索する機能をつけたいんですがどうすれば良いでしょうか? 例えば、キャラクターが動いたら変化した座標や位置データを調べるようにしたいんですが

BOSS CUBE Street IIのモニタ方法
このQ&Aのポイント
  • BOSS CUBE Street IIのモニタ方法について質問があります。
  • 使用機材を少なくしたい場合、他の方法でイヤホンでモニタすることは可能でしょうか?
  • BOSS CUBE Street IIを使用して電源の無い所でのライブを計画していますが、スピーカから音が出なくなる問題があります。
回答を見る