Какой самый быстрый способ получить количество строк в CSV-файле? - PullRequest
0 голосов
/ 29 апреля 2018

Каков наилучший способ получить количество строк в файле CSV? У меня есть большой файл CSV (1 ГБ), и перебор всего файла с использованием getline занимает вечно. Вот что я попробовал:

string s; 
int RowCount=0;

ifstream in("sample.csv");

while(!in.eof()) {
    getline(in, s);
    RowCount ++;
}

cout << "Rows: "<<RowCount;

in.close(); 

Есть ли способ определить количество строк в текстовом файле, не открывая его?

1 Ответ

0 голосов
/ 29 апреля 2018

Вы не можете определить количество строк в файле, не открывая его. Если каждая строка не имеет фиксированной длины, в этом случае вы можете просто разделить размер файла на длину строки. В противном случае вы фактически должны прочитать весь файл, считая строки.

Это должно быть как можно быстрее:

std::ifstream in("sample.csv");

std::size_t RowCount = 0;

char buff[4096]; // larger = faster (within limits)

while(in.read(buff, sizeof(buff)) || in.gcount())
    RowCount += std::count(buff, buff + in.gcount(), '\n');

std::cout << "Rows: " << RowCount;

Считывает файл кусками в буфер и считает количество маркеров окончания строки '\n'. Чем больше буфер, тем эффективнее он должен быть.

...