我正在测试我们在处理数据的应用程序上运行的升级。我获取了之前已经通过系统运行的存档数据,并将其与新升级的应用程序的输出进行比较。我注意到数据是相同的,但是新输出中数据的排列是不同的。例如,在新文件中,第57行的数据曾经位于旧输出的第43行。有没有办法检测文件包含相同的内容?当我在TextPad中运行文件比较或执行MD5哈希比较时,它不会检测到文件具有相同的内容。它将它们视为不同的文件。
答案 0 :(得分:1)
散列比较是没有意义的。由于带有
的两个文件foo
bar
和
bar
foo
将生成完全不同的哈希。否则,散列函数将被破坏。
我认为您唯一的机会是查看文件A中的每一行是否都在文件B中(逐行)。也许您可以实现排序算法。可以在两个文件上同时执行此操作,然后可以比较这两个文件的哈希,因为排序算法在其输出中是确定性的。
答案 1 :(得分:1)
如Enak和Dominique所述,逐行对文本文件进行排序,然后对两者进行比较,可以确定是否丢失任何东西。
您可能会计算两个文件的一些合计值,并比较它们以获得足够的证据,这会快得多。单词和字符的数量是否相同?那么不同字母的数量呢?计算两个文件中的所有26个字母(对于您选择的任何字符集,您也可以执行相同的操作),如果它们的数字完全匹配,则很有可能两个文件包含相同的信息。这与散列方法相同,但是显然不那么可靠。
如果需要确定地知道,则必须以某种方式将文件A的每一行与文件B的每一行进行比较。如果行被完全拖曳,则对文件A和B中的行进行排序,然后比较文件将是最佳选择。但是,如果存在局部性(文件A的行号x倾向于停留在文件B中的位置x周围),则最好不进行排序就比较这两个文件,而是开始在位置x处搜索文件A的行x在文件B中。