Как посчитать номера строк в файле?

У меня есть открытый текстовый файл с курсором в определенной позиции. Мне нужно найти номер строки курсора. Какой из следующих подходов является лучшим с точки зрения производительности?

1) Сохраните текущую позицию в переменной «pos» и найдите все символы «\ n» от начала файла до «pos».

ifstream in("file.txt");
// move anywhere in the file
int lineNum = 0;
std::string line;
istream::pos_type pos = in.tellg();
in.seekg(0);
while ( std::getline(in, line) ) {
++lineNum;
if(in.tellg() >= pos) break;
}

2) Сделайте то же самое, используя отдельный ifstream.

3) Что-нибудь еще?

2

Решение

С точки зрения производительности, может быть, лучше не использовать потоки и просто прочитать весь файл от начала до текущей позиции в одну большую строку (используя, например, fread) и посчитать вхождения разделителя новой строки из результирующей строки в памяти ,

1

Другие решения

API — отличное место, чтобы помочь

От: http://www.cplusplus.com/reference/istream/istream/getline/

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

Get line Извлекает символы из потока как неформатированный ввод и сохраняет их в s как c-строку, пока либо извлеченный символ не станет символом-разделителем, либо n символов не будет записано в s (включая завершающий нулевой символ).

Символ-разделитель — это символ новой строки (‘\ n’) для первой формы и разделитель для второй: найденный во входной последовательности, он извлекается из входной последовательности, но отбрасывается и не записывается в s.

Таким образом, лучшим способом было бы просто выполнить итерацию цикла while и увеличить счетчик. Вам не нужно искать новую строку, так как функция делает это за вас.

0

По вопросам рекламы [email protected]