2010-01-22 4 views
0

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

+1

что определение строки в текстовом файле? он ограничен? исправленный размер? –

+0

Текстовый файл содержит матрицу чисел. Я не знаю, сколько строк чисел будет – MRP

+2

* Если * "matrix" означает, что каждая строка имеет одинаковую длину, вы можете разделить общий размер на длину каждой строки. –

ответ

0
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

Это потрясающий сайт, чтобы получить помощь. Спасибо вам всем! – MRP

+1

c всегда! = '\ N', потому что это EOF. И c не должен быть символом. fgetc() возвращает int. – stesch

0

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

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

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

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

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

?

+0

Я полагаю, что мне пришлось бы прокручивать текстовый файл и иметь счетчик, подсчитывающий строки ... Я просто не знал, есть ли более простой способ. И да, у меня есть что-то вроде char * arr [lines] ; – MRP

2

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

1

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

5
#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; 
} 
+0

Что делать, если символ конца строки не '\ n'? – Tom

+0

замените '\ n' на ваш выбор разделителя строк :) отредактированная функция соответственно – vicatcu

+0

Вы имеете в виду 'fgetc (fp)'. –

Смежные вопросы