0

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

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

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

4

2 回答 2

0

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

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

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

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

于 2012-09-12T07:49:52.283 回答
0

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

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

再说一次,如果你不是在看家庭作业/重新发明轮子风格的作业,你可能想在现有工作的基础上再接再厉。比如,通过diff -y --suppress-common-lines | wc -l和 plain运行这两个文件wc -l,收集这两个调用的输出,并计算百分比。是的,这看起来很粗糙,但它比编写自己的差异算法更容易和更快您还将受益于该diff工具的未来改进,其维护者将所有时间都花在这些东西上。

再说一次,我会在 bash 中执行此操作,而不是在 C 中。;)

于 2012-09-12T08:55:06.870 回答