逐行处理来自 C++ 文件的数据的最有效(一般不容易出错/“正确”)方式(如果存在)是什么?也就是说,一次只使用文件中的一行来执行一些冗长的计算,然后再转到下一行。我已经考虑过以下选项,但无法决定哪个更合适。
目前我正在做类似的事情(打开,做所有事情,最后关闭):
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 };
一次读取所有数据(需要存储在 ~30x1000 2D 数组中,
line
用逗号分割成数组):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 数组听起来也不正确......