ファイルへ追記するには?

解決


シート  2004-06-26 20:49:17  No: 114355

VB5でデータをファイルに保存したいのですが、データの量が大量なのでCSV形式で保存しながら動かしたいのです。
しかし、appendではデータの量が多すぎるためすぐに65536行を超えてしまいexelで読めなくなります。そのため、列を追加したいのです。
仮に
12,13,14
12,15,16
13,25,45
というデータが保存してあるとして、次に
12,13,14,15
12,15,16,18
13,25,45,36
としたいのですが、
line input #1,deta
print #2,deta & 15
などとやると時間がかかる上に、列が増えていったときに動作が遅くなってしまいます。
また、全部のデータを一度に書く方法ではメモリが足りなくなってしまうため無理でした。

何かいい方法はあるのでしょうか?
よろしくお願いします。


ken  2004-06-27 00:27:03  No: 114356

String型の変数にデータをためこんで
最後にprintで書き込みを行うのはどうでしょうか?


Max  2004-06-28 01:56:59  No: 114357

CSVに固執しないのであれば、データ保存形式をCSVじゃなくバイナリ形式で
保存したらどうでしょう?
1個のデータ長を決めていればSeek関数等で自由に読み出しや書き込みが
できると思いますが。


シート  2004-06-28 19:21:56  No: 114358

返事送れて申し訳ありません。
kenさんの方法は先に試しておりました。それだとだんだんメモリが減っていき、メモリが足りなくなってしまいまして、別の方法を探してました。すいません。
バイナリ形式で保存というのを試してみました。
一度書いたファイルの中身に「挿入」というイメージでの書き込みはできないのでしょうか?
たとえば
12 14 15
の12と14の間に入れたい時に、普通にやると
12 13 15
と上書きされてしまいました。

バイナリ形式は触ったことが無いのでさっぱりなのですが、いろいろできそうな感じなので、「挿入」が無いのであれば、このバイナリ形式で作成したファイルを一時ファイルという形して、最後にcsvへ変換するプログラムにしようと思います。


Say  2004-06-28 21:25:49  No: 114359

挿入/削除が発生するなら、素直にDB使ったほうがいいのでは?

まあ、ファイル処理でも、List構造などを用いれば
挿入/削除は可能ですが・・・。


Max  2004-06-28 21:32:16  No: 114360

挿入という操作は無かったと思います。
やるのであれば自分で作る必要があります。

例えばデータがIntegerとして、1行の最大データ個数を1000個とすると
あらかじめ2×1001×必要行数分バイトのファイルを作成しておき
最初の2バイトで現在のその行のデータの個数を記録しておき、データを
その行に追加する場合は、カウンターで記録されている
その次のバイトより置き換えて行くとかの処理ではどうでしょう?

2バイト        2バイト  2バイト          2バイト
[データ個数=n][データ1][データ2]....[データ1000]

・m行分

[データ個数=n][データ1][データ2]....[データn]


シート  2004-06-28 22:18:00  No: 114361

DBというのはデータベースの略でしょうか?
VBのデータベースといわれてもさっぱりわからないので、後々勉強したいと思います。

maxさんのやつはなるほど  と思いました。
つまり、10行でやめても1000行まで書いてもファイルのサイズは同じと言うことですよね。
この方法を使って書きたいと思います。
皆様ありがとうございました。


シート  2004-06-28 22:19:12  No: 114362

解決にチェック入れるの忘れてました


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加