すっきりタイムスタンプをデータの途中に入れ、かつ、バイナリデータを そのままをデータに書く方法です。 データの形式は固定長のバイナリブロックが単純連結された形式です。 (ブロック)(ブロック)(....)(ブロック) ここで(ブロック)とは固定長のバイナリファイルで(ブロック)は (ブロック 4096 バイト)=(ヘッダ部 64 バイト)+(データ部 4032 バイト) とわかれ、ヘッダ部には以下の情報を持たせます。
以下に I2, I4, S4 などと表現さている部分はそれぞれの要素のサイズが 整数2バイト、整数4バイト、文字2バイト、文字4バイト となっていることを示します。I1 は1バイト整数型 char です。
(*) 2000 にしなかったのは 19xx 年のデータが存在するため。
年月日時分秒は ASCII 文字列形式 yymmddhhmmss でもかまいません。
そのときは msec は I4 となり、予備部が I16 としてヘッダー部の I4 整数型の
4 バイト整合配置を維持します。
(**) 閏秒も考慮にいれています。
(***) 直後のデータ部が保持するサンプルペアの数であって、1時間の積算ではないこと
に注意してください。0 以上 504 以下の任意の値が可能です。
圧力カウンタ値+温度カウンタ値 I4+I4 これがヘッダ部の計測数回繰り返されます。 データ部は最大 504 回の計測値を保持することが可能ですが、504 回以下で終えること も可能。その場合は計測値が入らないデータ部には 0x00 で埋められます。 一つ大切なことは、設定メニューを増やし、設定メニューの中に、分周値に加え、設置場 所記号も入力設定できるようにしておきます。
参考までに、プログラムの書き方を示します。必ずこうしなければならないということで はありません。
ヘッダ部 64 バイトを構成する構造体と、4032 バイトのデータ部を構成する構造体を定義 して、さらにその二つをメンバーとするブロックを構成する構造体を定義します。
毎正時にヘッダを作成するというここだわらる必要がないのなら、4)は次行のように なります。
(4)504回のデータが集まれば(5)へ、もしくは観測終了なら(6)へ
1度に保持するデータサイズは4096バイト程度なので、メモリーも圧迫しませんし、 ファイルへの書き込み回数がぐっと減り高速、しかも、書き出し時以外はファイルは閉じ られているので、途中プログラム障害が発生しても、データファイルに影響がない。逆に、 障害発生直前のデータは最大 504 個まで失われます。 (1秒サンプルで8分強、10秒サンプルで84分) 読み込みプログラムも同様に順序良く書くことができます。これまた、高速にファイル アクセスすることが可能となります。 ファイル中の特定の時刻のデータの検索も、4096バイトのブロック構造体のメンバー であるヘッダ構造体を参照して検索できるので、高速になります。 ブロックサイズが4096バイトでは大きすぎるというときには、データ部の大きさを 変更して、ブロックサイズが512バイトになるように設計してもいいでしょう。