2017-02-21 4 views
1

私はプログラムで作業しており、私の "データベース"はいくつかの.csvファイルです。C++でのデータ処理

私は、.csv内のオブジェクトのリストを持っており、それぞれについていくつかの情報を持っています。どのような "データ"を処理するために最適な方法です。

  • 毎回私がデータを変更したい、または私は私が直接のfstream
  • または、プログラムの冒頭のツールで私のファイルで作業します何かを読みたいということを意味fstreamのと協力し、私はベクトルにデータをロードし、ベクトル上に読み書きし、プログラムの終わりに前のファイルを削除して新しいファイルをロードします。

性能面では違いますか?オブジェクトが多数あることを考慮する。

+1

2番目の方法に従うと、プログラムの実行中にファイルが変更されるとどうなりますか?これらの2つのアプローチの明白な違いに加えて、パフォーマンスへの影響の問題でさえ、十分なコンテキストがありません。 – mpiatek

+1

開く、キャッシュに読み込み、ファイルを閉じます。キャッシュが変更されている場合は、ファイルに定期的に書き込みます。間違いなく出口に書いてください。あなたは古いファイルを削除する必要はありません。ファイルを開いて上書きしてください。 – user4581301

+0

私のポイントは明らかだったと思います。 fstreamでは、入力/出力ストリームクラス –

答えて

2

私は、AまたはBを選択するのではなく、複数のコンポーネントが同時にファイルにアクセスできるので、Aのみを選択することは安全ではないと考えています。さらに、多くのアップデートがある場合は、毎回ストリームを使用するとコードが非常に遅くなる可能性があります。

したがって、私はあなたがBを使うべきだと考えていますが、あなたのデータを安全な方法で保持する(ファイルにデータを書き込む)実装を世話してください。

データ構造に関しては、これは用途によって異なります。ここで尋ねる重要な質問の1つは、挿入や削除が多いかどうかです。この場合、ベクトルの代わりにlistを使用するほうが効率的です。リストは即時の挿入を提供し、vectorはこの目的には適していないためです。

データにユニークな属性が含まれていて、高速検索が必要な場合は、ハッシュまたはマップが適しています。

0

私のCSVtoCユーティリティからCSVパーサーを取得します。レコードが知られているディスクの物理的な位置に固定されていないよう

http://www.malcolmmclean.site11.com/www/

CSVファイルには、動的更新のために良いものではありません。 (代替策は、CSVがそれを保持しないように工夫することですが、繊細で面倒なアプローチです)。

CSVを読むことは難しく、1つ書くのは簡単です。