2009-12-15 15 views
5

Czy ktoś może pokazać mi, jak uzyskać całkowitą liczbę linii w pliku tekstowym w języku programowania C?Pobieranie całkowitych numerów linii w pliku

+0

Czy wydajność czynnikiem? Jak duże są pliki? –

+1

twoje poprzednie pytanie mu nie pomogło? http://stackoverflow.com/questions/1910618/c-reading-a-text-file-into-array-line-by-line-and-print-them – lsalamon

+0

będzie zawierać 3 miliony linii, każda linia składa się z trzech punkty zmiennoprzecinkowe oddzielone spacją, to plik Triangulated Irregular Network generowany z pliku LASAR LAS. – asel

Odpowiedz

20

To jedno podejście:

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

Ta funkcja daje fałszywe wyniki, ponieważ pętla jest kończona na 'ch! = EOF', a następnie wartość' ch' jest testowana z 'ch! = '\ N'', która jest zawsze prawdziwa, ponieważ w tym momencie' ch 'równa się' EOF'. Funkcja niepoprawnie zwraca jeszcze jeden wiersz, jeśli plik kończy się znakiem '\ n'. Jeśli plik jest pusty lub jeśli nie kończy się na '\ n', funkcja zwraca oczekiwaną liczbę linii. Prawidłowe rozwiązanie sprawdzi ostatni znak przed 'EOF'. –

-5

A "nie przez kierownika projektu" Rozwiązanie

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

To naprawdę nieproduktywna odpowiedź. Ponadto, wykopujesz pytanie z 2009 roku. –

+1

Ta odpowiedź zakłada użycie określonego systemu operacyjnego. – Eran