我正在研究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; }
如何返回相同行的百分比?
你试过https://www.text-compare.com/吗? 这是比较两个文件并找出差异的简单方法。
如果你真的需要在C中实现,为什么不有两个文件处理程序,每个换行读取字符串,比较两个字符串,如果它们匹配保留它们,如果不匹配,则遍历字符以找到差异。
或者您可以加载主文件,然后将比较文件与主文件中的每一行进行比较,并查看是否有任何行给出匹配> 75%并显示更改。
你能展示你到目前为止所做的一切吗?
diff算法的真正问题在于您不能简单地逐行比较。 假设文件几乎相同,但是一个文件在文件的开头有一个额外的行。 一个天真的(逐行memcmp
)实现将导致100%的差异……
你可能有很多阅读要做。 上面的链接可能为您提供一个起点。
再说一遍,如果你不是在看家庭作业/重新发明轮子式的作业,你可能希望以现有作品为基础。 比如,通过diff -y --suppress-common-lines | wc -l
运行这两个文件 diff -y --suppress-common-lines | wc -l
和plain wc -l
,收集这两个调用的输出,并计算百分比。 是的,这看起来粗糙,但它比编写自己的diff算法更容易,更快捷。 你也将受益于diff
工具的未来改进,其维护者将所有时间花在这些东西上。
再说一次,我是用bash做的,而不是用C.;)
以上就是c/c++开发分享在文件中搜索特定的行c代码相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/523269.html