我正在测试我们在处理数据的应用程序上运行的升级。我获取了之前已经在系统中运行过的归档数据,并将其与新升级的应用程序的输出进行了比较。我注意到数据是相同的,但是新输出中数据的排列是不同的。例如,在新文件中,第57行的数据过去在旧输出的第43行上。是否有检测文件包含相同内容的方法?当我在TextPad中运行文件比较或进行MD5哈希比较时,它不会检测到这些文件具有相同的内容。它把它们看作是不同的文件。
发布于 2018-10-25 13:33:41
正如Enak和Dominique所提到的,将文本文件逐行排序,然后比较这两个文件,将完全肯定地显示出是否有任何遗漏。
您可能会计算两个文件的一些聚合值,并将它们进行比较以获得足够的证据,这将大大加快速度。单词和字符的数量相同吗?那么不同字母的数量呢?计算两个文件中的所有26个字母(您也可以对您选择的任何字符集执行相同的操作),如果它们的数字完全匹配,则很有可能两个文件包含相同的信息。这与您的散列方法相同,但显然不那么可靠。
如果您需要确切地知道,您将不得不以某种方式比较每一行文件A和每一行文件B。如果行被完全洗牌,对文件A和B中的行进行排序,然后比较这些文件将是最好的选择。但是,如果存在局部性(文件A的行号x往往停留在文件B中的位置x附近),那么您最好不对这两个文件进行排序,而是开始搜索文件B中位置x周围的文件行x。
发布于 2018-10-25 13:17:26
散列比较是没有意义的。因为例如有两个文件
foo
bar和
bar
foo会产生完全不同的哈希。否则,散列函数就会被破坏。
我认为您在这里的唯一机会是查看文件A中的每一行是否都在B文件(逐行)中。也许你可以实现一种排序算法。这可以在两个文件上同时完成,然后您可以比较这两个文件的散列,因为排序算法的输出是确定性的。
https://stackoverflow.com/questions/52989654
复制相似问题