У меня есть следующие данные, выглядит следующим образом, например:Как я могу правильно проанализировать файл? (Использование перерыва/продолжить)
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;
}
переключатель с только 1 случаем и по умолчанию кажется мне как-то-то ... –
@Luc: Конечно, вперед. Это действительно вопрос стиля и предпочтений. Мне нравятся переключатели. –
К сожалению, этот код по-прежнему содержит опасную ошибку, о которой я упоминал, связанную с бесконечным циклом ('while (! File.eof())). –