c количеством строк в файловом потоке - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть поток файлов в C, и я хочу знать, сколько строк в нем, без перебора файла. Каждая строка имеет одинаковую длину. Как я могу пойти по этому поводу?

Ответы [ 4 ]

3 голосов
/ 24 февраля 2012

Как насчет этого:

  • Сделайте fgets и выясните, какова длина одной строки
  • Найдите размер файла, используя fseek и ftell

    fseek(fp, 0, SEEK_END);
    size = ftell(fp);
    
  • Разделить на размер строки

Вы также можете использовать fseeko и ftello, которые работают с off_t.

2 голосов
/ 24 февраля 2012

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

Это будет работать только с кодировками фиксированной ширины (ASCII-7, различные 8-битные кодировки ANSI, UTF-32); с кодировками переменной ширины (например, UTF-8) вам придется сканировать весь файл, поскольку длина строки не обязательно пропорциональна количеству байтов.

0 голосов
/ 24 февраля 2012

Возьмите ftell() и разделите на длину линии.

0 голосов
/ 24 февраля 2012

Прочитайте одну строку, stat() файл в , получите общий размер , разделите общий размер на длину первой строки.

Вместо использования stat() вы можететакже fseek() до конца файла и затем используйте ftell(), чтобы получить размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...