C ++でファイルから行ごとにデータを処理する最も効率的な(エラーが発生しにくい/一般的に「適切な」)方法は何ですか?つまり、ファイルから一度に 1 行だけを使用して、次の計算に移る前に長い計算を実行します。次のオプションを考えましたが、どれがより適切かを判断できません。
現時点では、次のようなことをしています(開いて、すべてのことを行い、最後に閉じます):
string line; fstream myfile; int numlines = 1000; myfile.open("myfile.csv"); for(int i = 0; i < numlines; i++){ getline(myfile, line); // do something using read data }; myfile.close();
データが読み取られた直後に開いて閉じます (データのインポートよりも計算に時間がかかるため、速度はそれほど低下しません):
string line; fstream myfile; int numlines = 1000; for(int i = 0; i < numlines; i++){ myfile.open("myfile.csv"); for(int j = 0; j < i+1; j++) getline(myfile, line); myfile.close(); // do something using read data };
line
一度にすべてのデータを読み取ります (コンマで配列に分割されるため、~30x1000 の 2D 配列に格納する必要があります):string line; fstream myfile; int numlines = 1000; double data[numlines][30]; myfile.open("myfile.csv"); for(int i = 0; i < numlines; i++){ getline(myfile, line); // split by comma, store in data[][] } myfile.close(); for(int i = 0; i < numlines; i++){ // do something using data[i][] };
ここに落とし穴がありますか、または上記の解決策のいずれかが機能する場合と同じくらい優れていますか? ファイルを数時間開いたままにしておくのは良い考えではないかもしれませんが(多分?)、メモリに大きな二重2D配列を保持するのも正しくないように思えます...