Как я могу быстро определить количество строк в текстовом файле? - PullRequest
0 голосов
/ 22 января 2010

Я новичок в использовании программирования на C. Мне было интересно, есть ли вызов функции, который можно использовать для быстрого определения количества строк в текстовом файле.

Ответы [ 5 ]

6 голосов
/ 22 января 2010
#include <stdio.h>
#include <stdint.h>

uint32_t CountRows(FILE* fp, uint8_t line_delimiter){
  uint32_t num_rows = 0;
  uint16_t chr = fgetc(fp);
  while(chr != EOF){
    if(chr == line_delimiter){
      num_rows++;
    }
    chr = fgetc(fp);
  }

  return num_rows;
}
2 голосов
/ 22 января 2010

Нет. Хотя есть стандартная утилита Unix, которая делает это, wc. Вы можете найти исходный код для wc, чтобы получить некоторые указатели, но все сводится к простому чтению файла от начала до конца и подсчет количества строк / работ / чего угодно.

1 голос
/ 22 января 2010

Вы должны написать свои собственные, и , вы должны помнить о форматировании файла ... Строки заканчиваются на \n? или \r\n? А что, если последняя строка не заканчивается новой строкой (как все файлы должны)? Вы, вероятно, проверите их, а затем посчитаете переводы строк в файле.

0 голосов
/ 22 января 2010
int numLines(char *fileName) {
    FILE *f;
    char c;
    int lines = 0;

    f = fopen(fileName, "r");

    if(f == NULL)
        return 0;

    while((c = fgetc(f)) != EOF)
        if(c == '\n')
            lines++;

    fclose(f);

    if(c != '\n')
        lines++;

    return lines;
}
0 голосов
/ 22 января 2010

Нет, нет. Вы должны написать свой собственный.

Если размер строки фиксирован, то вы можете использовать fseek и ftell, чтобы перейти к концу файла а затем рассчитать его.

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

Вы пытаетесь создать массив строк? Что-то вроде

char* arr[LINES] //LINES is the amount of lines in the file

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