2010-01-22 38 views
0

我是新來的使用C編程我想知道是否有一個函數調用,可以用來快速確定文本文件中的行數。如何快速確定文本文件中的行數?

+1

什麼在你的文本文件中的一個行的定義是什麼?它是否被劃定?固定大小? – 2010-01-22 20:30:18

+0

該文本文件包含一個數字矩陣。我不知道會有多少行數 – MRP 2010-01-22 20:31:59

+2

*如果*「矩陣」意味着每一行都是相同的長度,您可以將總大小除以每行的長度。 – 2010-01-22 20:34:03

回答

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 2010-01-22 20:40:15

+1

c總是!='\ n',因爲它是EOF。而c不應該是char。 fgetc()返回一個int。 – stesch 2010-01-22 20:49:09

0

不,不是。你必須自己寫。

如果行大小固定,則可以使用fseek和ftell移動到文件末尾 然後計算它。

如果不是,您必須通過文件計數行。

你想創建一個行數組? 類似於

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

+0

我想我將不得不通過文本文件循環,並有一個計數行......我只是不知道是否有一個更簡單的方法.. 而且我有類似char * arr [行] ; – MRP 2010-01-22 20:36:47

2

不。有一個標準的Unix實用程序可以完成此操作,wc。您可以查看wc的源代碼來獲取一些指針,但它可以歸結爲簡單地從頭到尾讀取文件並計算行數/作品數量。

1

你必須自行編寫,你必須意識到文件的格式化... Do行以\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 2010-01-22 20:35:33

+0

用你選擇的行分隔符替換'\ n':)相應編輯的功能 – vicatcu 2010-01-22 20:36:13

+0

你的意思是'fgetc(fp)'。 – 2010-01-22 20:36:20

相關問題