我正在研究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;
}
如何返回相同行的百分比?
答案 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.;)