2009-12-15 2 views
5

может кто-нибудь показать мне, как получить общее количество строк в текстовом файле на языке программирования C?Извлечение всех номеров строк в файле

+0

Является ли производительность фактор? Насколько велики файлы, которые могут быть? –

+1

Ваш предыдущий вопрос не помог ему? http://stackoverflow.com/questions/1910618/c-reading-a-text-file-into-array-line-by-line-and-print-them – lsalamon

+0

будет содержать 3 миллиона строк, каждая строка состоит из трех плавающие точки, разделенные пространством, это триангулированный файл нерегулярной сети, созданный из файла LIDAR LAS. – asel

ответ

20

Это один подход:

FILE* myfile = fopen("test.txt", "r"); 
int ch, number_of_lines = 0; 

do 
{ 
    ch = fgetc(myfile); 
    if(ch == '\n') 
     number_of_lines++; 
} while (ch != EOF); 

// last line doesn't end with a new line! 
// but there has to be a line at least before the last line 
if(ch != '\n' && number_of_lines != 0) 
    number_of_lines++; 

fclose(myfile); 

printf("number of lines in test.txt = %d", number_of_lines); 
+2

Эта функция дает ложные результаты, потому что цикл выходит из 'ch! = EOF', а затем значение' ch' проверяется на 'ch! = '\ N'', что всегда верно, так как в этот момент' ch 'равно' EOF'. Функция неправильно возвращает еще одну строку, если файл заканчивается символом '\ n'. Если файл пуст или если он не заканчивается символом '\ n', функция возвращает ожидаемое количество строк. Правильное решение будет проверять последний символ перед 'EOF'. –

-5

А "не руководителем проекта" Решение

system("wc profile.dat > no.lines"); 
FILE *pfile = fopen("no.lines", "r"); 
int lines; 
fscanf(pfile, "%d", &lines); 
system("rm no.lines"); 
+1

Это действительно непростительный ответ. Кроме того, вы решаете вопрос с 2009 года –

+1

Этот ответ предполагает использование определенной ОС. – Eran

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