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
などとやると時間がかかる上に、列が増えていったときに動作が遅くなってしまいます。
また、全部のデータを一度に書く方法ではメモリが足りなくなってしまうため無理でした。
何かいい方法はあるのでしょうか?
よろしくお願いします。
String型の変数にデータをためこんで
最後にprintで書き込みを行うのはどうでしょうか?
CSVに固執しないのであれば、データ保存形式をCSVじゃなくバイナリ形式で
保存したらどうでしょう?
1個のデータ長を決めていればSeek関数等で自由に読み出しや書き込みが
できると思いますが。
返事送れて申し訳ありません。
kenさんの方法は先に試しておりました。それだとだんだんメモリが減っていき、メモリが足りなくなってしまいまして、別の方法を探してました。すいません。
バイナリ形式で保存というのを試してみました。
一度書いたファイルの中身に「挿入」というイメージでの書き込みはできないのでしょうか?
たとえば
12 14 15
の12と14の間に入れたい時に、普通にやると
12 13 15
と上書きされてしまいました。
バイナリ形式は触ったことが無いのでさっぱりなのですが、いろいろできそうな感じなので、「挿入」が無いのであれば、このバイナリ形式で作成したファイルを一時ファイルという形して、最後にcsvへ変換するプログラムにしようと思います。
挿入/削除が発生するなら、素直にDB使ったほうがいいのでは?
まあ、ファイル処理でも、List構造などを用いれば
挿入/削除は可能ですが・・・。
挿入という操作は無かったと思います。
やるのであれば自分で作る必要があります。
例えばデータがIntegerとして、1行の最大データ個数を1000個とすると
あらかじめ2×1001×必要行数分バイトのファイルを作成しておき
最初の2バイトで現在のその行のデータの個数を記録しておき、データを
その行に追加する場合は、カウンターで記録されている
その次のバイトより置き換えて行くとかの処理ではどうでしょう?
2バイト 2バイト 2バイト 2バイト
[データ個数=n][データ1][データ2]....[データ1000]
・
・m行分
・
[データ個数=n][データ1][データ2]....[データn]
DBというのはデータベースの略でしょうか?
VBのデータベースといわれてもさっぱりわからないので、後々勉強したいと思います。
maxさんのやつはなるほど と思いました。
つまり、10行でやめても1000行まで書いてもファイルのサイズは同じと言うことですよね。
この方法を使って書きたいと思います。
皆様ありがとうございました。
解決にチェック入れるの忘れてました
編集 削除