[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/09/11(Sat) 02:00
投稿者名:マリリン
Eメール:
URL :
タイトル:
ログファイル作成
はじめまして。
早速ですが、ログファイル作成で悩んでます。

1ファイルに、日時,メッセージ 1行1データです。
メッセージ文字数は可変です。
一定期間保存後、削除します。

新規メッセージは、ファイルの最後に追加書き込みをしますが
一定期間以上のデータを削除する処理としては
1度全て読込み、必要データのみ
1から書き直す処理しか方法は、ないのでしょうか?

例えば、1行づつ読み込み期間判定を行い
期間内データを読込んだ時点で、そのデータ以降を
いっきに書き込むか、
期間外データのみを削除する処理は出来ないのでしょうか?

DBでなく、テキストファイル(CSV)で作成するようにとの要求もあり
また、出力されるログの数も、はっきりしていない為
なるべく早く簡単な処理をしたいのですが
どうすれば良いのかわかりません。

どなたか、良い方法を教えて下さい。

よろしくお願いします。

投稿時間:2004/09/11(Sat) 20:07
投稿者名:Say
Eメール:
URL :
タイトル:
Re: ログファイル作成
CSVのフォーマットに発言権があるなら、
例えば、
CSV風固定長テキストファイルにして、双方向リスト用の次行/前行ポインタ列を付加しておけば、
バイナリで読み書きすることにより好きな行を追加、修正、削除可能になります。

問題として、
●Logを順番にわかりやすく表示するには、専用のビューワーを作る必要がある。
●削除行は、新規行で上書きされるか、最適化処理をするまでファイル内に残骸が残る。
●先頭からのオフセットアドレスで読み書きするので、ファイルに人手が加わると破綻する可能性がある。

フォーマットは、例えば、

削除フラグ(1byte),絶対行(8byte),次行(8byte),前行(8byte),Log本文(512byte)改行

データ例
0,00000001,00000003,00000000,本文1(512byte)・・・
1,00000002,00000006,00000000,削除行1(512byte)・・・
0,00000003,00000005,00000001,本文2(512byte)・・・
0,00000004,99999999,00000005,本文4(最終行)(512byte)・・・
0,00000005,00000004,00000003,本文3(512byte)・・・
1,00000006,99999999,00000002,削除行2(最終行)(512byte)・・・

みたいなかんじ。

先頭行を管理行にして、本文第1行、本文最終行、削除第1行、本文最終行、全行数、全本文行数などを
保持しておけば、少しアクセス速度を上げられます。

別途インデックスファイルを用意すれば、二分検索できるようになりますから、
参照は高速になりますが、書き込みは低速になります。
また、インデックスファイルとCSVファイルの同期の問題も残ります。

参考までに技術資料です。
hhttp://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9712/rdbms/