2012-09-17 96 views
-3

我正在c。 我有兩個文件。我想問問,如果第二個文件中存在第一個文件的每行測試的最佳方法,那麼最好的方法是什麼。檢查2個文件c代碼

我還需要一些示例代碼。

THX

+0

這些文件有多大(最大行數,每行最大字符數)? –

+4

[你有什麼嘗試?](http://whathaveyoutried.com) – Minion91

+0

最好的方法是獲取每個文件內容,查看第一行的內容是否出現在第二行中,然後就完成了。根據您所說的嘗試以及您給我們的代碼來作爲您的問題的示例,您可能無法理解這一點,但請繼續努力,有一天您會達到目的。 – Eregrith

回答

0

嘗試diffviewer,而不是你自己的編碼呢?

http://meldmerge.org/

否則,C,從開始到結束比較字符,請記住在各自立場上的分歧並打印出來?

+1

也許OP只是需要測試存在而不是命令?例如,一個包含'a \ nb \ nc'的文件可能會匹配一個包含'b \ nc \ nd \ na'的文件。 – Eregrith

+0

這是怎麼回事? – mmoment

+0

*如果存在於第二個文件中,則從第一個文件的每行中進行測試。*他不想檢查文件是否相同。這看起來更像是在完整文件中查找行列表。 – Eregrith

0

由於問題有點含糊,「散列」可能是一個有點含糊的答案。

0
#include <stdio.h> 
#include <stdbool.h> 
#include <stdlib.h> 
#include <string.h> 
#include <errno.h> 

int compareFiles(const char * filename_compared, const char *filename_checked, int *matched) 
{ 
    int matches = 0; 
    int lines = 0; 
    char compare_line[10000]; 
    char check_line[10000]; 

    char *compare; 
    char *check; 
    FILE *f_compare; 
    FILE *f_check; 

    f_compare = fopen(filename_compared,"r"); 
    if (f_compare == NULL) 
    { 
     printf("ERROR %d opening %s\n",errno,filename_compared); 
     return EXIT_FAILURE; 
    } else { printf("opened %s\n",filename_compared); } 

    f_check = fopen(filename_checked,"r"); 
    if (f_check == NULL) 
    { 
     printf("ERROR %d opening %s\n",errno,filename_checked); 
     return EXIT_FAILURE; 
    } else { printf("opened %s\n",filename_checked); } 
    compare = fgets(compare_line,sizeof(compare_line),f_compare); 
    while ( ! feof(f_compare) ) 
    { 
     lines++; 
     fseek(f_check,0,0); 
     check = fgets(check_line,sizeof(check_line),f_check); 
     while ( ! feof(f_check)) 
     { 
      if (strcmp(compare_line,check_line) == 0) 
      { 
      matches++; 
      break; 
      } 
      check = fgets(check_line,sizeof(check_line),f_check); 
     } 
     compare = fgets(compare_line,sizeof(compare_line),f_compare); 
    } 
    *matched = matches; 
    printf("%d lines read in first file and %d lines matched a line in the 2nd file\n",lines,matches); 
    fclose(f_check); 
    fclose(f_compare); 
    return EXIT_SUCCESS; 
} 

int main(int argc, char *argv[]) 
{ 
    int matches; 
    if (argc < 3) 
    { 
     printf("ERROR: You must enter the two input filenames\n"); 
     return EXIT_FAILURE; 
    } 
    int return_code = compareFiles(argv[1],argv[2],&matches); 
    if (return_code == EXIT_SUCCESS) 
     printf("%d lines in %s matched a line in %s\n",matches, argv[1],argv[2]); 
    else 
     printf("there was an error in processing the files\n"); 
} 
0

只是安吉拉,只是研究C書你指向爲做這個只是作業的任務。它可能只有文件處理的整個章節。

你需要熟悉fopen(和fclose),fscanf,fseek和可能的memcmp,對於初學者來說。