2012-09-13 123 views
0

我需要逐行比較兩個文件。其中一個文件在行尾具有^ M這樣的字符。我想在比較時排除這一點。我還需要找到匹配的行數。這是我的代碼。如何添加^ M和增加線控制器的位置?比較兩個文件c代碼

int compareFile(FILE* file_compared, FILE* file_checked) 
{ 
    bool diff = 0; 
    int N = 65536; 
    char* b1 = (char*) calloc (1, N+1); 
    char* b2 = (char*) calloc (1, N+1); 
    size_t s1, s2; 

    do { 
     s1 = fread(b1, 1, N, file_compared); 
     s2 = fread(b2, 1, N, file_checked); 

     if (s1 != s2 || memcmp(b1, b2, s1)) { 
      diff = 1; 
      break; 
     } 
     } while (!feof(file_compared) || !feof(file_checked)); 

    free(b1); 
    free(b2); 

    if (diff) return 0; 
    else return 1; 
} 

void main(int argc, char *argv[]) 
{ 
FILE *fpread, *fpread2; 
    char filebuff[MAXLINE]; 
    char filebuff2[MAXLINE]; 
    int var = 0; 
    int linecount = 0; 
printf ("COMPARE RESULT %d \n",compareFile("file1","file2")); 
+3

你的函數收到文件名或FILE * ?? –

+0

[在特定行c代碼的文件中搜索]的完全重複(http://stackoverflow.com/questions/12383443/search-in-a-file-for-a-specific-line-c-code),你昨天剛剛在這裏問過。 – DevSolar

回答

1

您認爲^M什麼其實是在回車符(ASCII 13,C語法\r)。在比較文本文件時,最好不要關心使用的線路終端模式,因爲有幾種(Unix,Windows和Mac都有自己的)。

您應該將輸入拆分成行,忽略使用的確切行終止,並比較

UPDATE編寫一次讀取一個字符的函數,當它達到任何有效的行終止序列時停止,並確保隨着行的增長動態分配內存。

+0

該怎麼做?你能舉個例子嗎?我不知道如何解決這個問題。謝謝 –

0

在第一次:

int diff = 0; 

增量計數器:

if (s1 != s2 || memcmp(b1, b2, s1)) { 
    ++diff; 
} 

,並在最後只是這樣的:

return diff; 

而且你的功能應該是:

int compareFile(char* fc_name,char* fk_name){ 
    /* Variable Declarations */ 
    FILE *file_compared = fopen(fc_name,"r"); 
    FILE *file_checked = fopen(fk_name,"r"); 
    if(file_compared == NULL || file_checked == NULL) 
      return -1; 
    /* .... */ 
}