2012-09-12 72 views
0

我在C上工作。我想問一下在文件中搜索特定行(或多行)的最佳方法是什麼?有人可以給我一個例子。我有2個文件,我想看看這兩個文件是80%相同。我想過在其中一個文件中搜索另一個文件中的特定行。 Thx在一個文件中搜索特定的行c代碼

我需要一些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; 
} 

如何返回相同線路的百分比是多少?

+0

執行文件包含所有獨特的行或可在兩個文件中重複行? – Scooter

+0

它們包含獨特的線條。 –

回答

0

你試過http://www.text-compare.com/了嗎? 這是比較兩個文件並找出差異的簡單方法。

如果你真的需要C中的實現,爲什麼不能有兩個文件處理程序,每個換行符都要讀取字符串,比較兩個字符串,如果匹配,保留它們,如果不匹配,則遍歷字符以找出差異。

或者您可以加載主文件,然後將比較文件與主文件中的每一行進行比較,並查看是否有任何行將匹配> 75%並顯示更改。

你能證明你迄今爲止做了什麼嗎?

+0

到目前爲止我還沒有做過任何事情。我在想什麼是做這件事的最好方法。我想創建一個字典..不知道:) –

+0

這個網站的工作原理是你編寫自己的代碼,然後遇到問題,然後發佈代碼導​​致問題,然後我們幫你解決你的問題。我們不會爲你寫代碼...... – Tschallacka

0

diff algorithms真正的問題是,你不能簡單地逐行比較。假設這些文件實際上是相同的,但是一個文件在文件的開頭處具有附加行。一個天真的(逐行memcmp)實施將導致100%的差異...

你可能有很多的閱讀要做。上面的鏈接可能會爲您提供一個起點。

然後,如果您不是在尋找家庭作業/重新創建輪子樣式的作業,您可能需要在現有作品上進行構建。比如,通過diff -y --suppress-common-lines | wc -l和普通wc -l運行這兩個文件,收集這兩個調用的輸出,並計算百分比。是的,這看起來很粗糙,但它比編寫你自己的差異算法更容易,更快速。您還將從diff工具的未來改進中受益,其中的維護者將花費全部他們的時間在這個東西上。

再說,我會做這在bash,而不是在C.;)