在文件中搜索特定的行c代码

时间:2012-09-12 07:47:53

标签: c file file-io

我正在研究C.我想问一下在文件中搜索特定行(或多行)的最佳方法是什么?有人可以举个例子。我有2个文件,我想看看这两个文件是否80%相同。我想在其中一个文件中搜索其他文件中的某些特定行。 THX

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

如何返回相同行的百分比?

2 个答案:

答案 0 :(得分:0)

你有没有试过http://www.text-compare.com/? 这是比较两个文件并找出差异的简单方法。

如果你真的需要在C中实现,为什么不要有两个文件处理程序,每个换行符读取字符串,比较两个字符串,如果匹配则保留它们,如果不匹配,则遍历字符以找出差异。

或者您可以加载主文件,然后将比较文件与主文件中的每一行进行比较,看看是否有任何行给出匹配> 75%并显示更改。

你能展示你到目前为止所做的事情吗?

答案 1 :(得分:0)

diff algorithms的真正问题在于您不能简单地逐行比较。假设这些文件实际上是相同的,但是一个文件在文件开头有一个额外的行 。一个天真的(逐行memcmp)实现将导致100%的差异...

你可能有很多阅读要做。上面的链接可能为您提供一个起点。

然后,如果你不是在看家庭作业/重新发明轮子式的作业,你可能希望以现有作品为基础。比如,通过diff -y --suppress-common-lines | wc -l和普通wc -l运行这两个文件,收集这两个调用的输出,并计算百分比。是的,这看起来很粗糙,但它比编写自己的diff算法更容易,更快。 。您还将受益于diff工具的未来改进,其中维护者将所有花费在这些东西上。

然后再说一遍,我是用bash做的,而不是用C.;)