例如,我有以下看起来像这样的数据:
34 foo
34 酒吧
34 qux
62 foo1
62 qux
78 qux
这些是根据第一列排序的。
我想要做的是处理以 34 开头的行,但我也希望文件迭代在它不再找到 34s 后退出,而不必扫描整个文件。我该怎么做?
原因是因为要处理的行数非常大(~10^7)。而那些以 34 开头的只占其中的 1-10% 左右。
我知道我可以 grep 这些行并将其输出到另一个文件中,但这太乏味并且会消耗更多磁盘空间。
此代码说明了我使用“继续”的失败尝试:
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std;
int main () {
string line;
ifstream myfile ("mydata.txt");
vector<vector<string> > dataTable;
if (myfile.is_open())
{
while (! myfile.eof() )
{
stringstream ss(line);
int FirstCol;
string SecondCol;
if (FirstCol != 34) {
continue;
}
// This will skip those other than 34
// but will still iterate through all the file
// until the end.
// Some processing to FirstCol and SecondCol
ss >> FirstCol >> SecondCol;
cout << FirstCol << "\t << SecondCol << endl;
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}