2012-11-08 170 views
2

我正在寻找快速比较两个文本文件(+ -15000lines)并获得两个文件中不同的输出字符串的最佳方式。 第一个是旧的库存,新的是当前库存,我想生成第三个包含文件2 & file1之间不同的字符串。 (两个文件中的95%将是相似的)。c#比较两个文本文件并生成一个新的差异

+0

你能描述一下这种情况下“相似”的含义吗?你需要以编程的方式来做到这一点,或者你只是想要一个工具来做差异(比如[WinMerge](http://winmerge.org))? – Groo

+0

它将在相同的顺序,但项目可能会丢失,主要是相同的,目标是以编程方式,谢谢。 – OwenS

回答

1

如果输出的顺序相同,则直接比较直线。当其他文件中缺少值时,您可能需要跳过行。

但是,如果输出不相同,则可能需要将文件加载到内存中,并从一个文件中查找相关库存项目。然后在没有找到或不同时做任何你需要的事情。

+0

+1如果订单不变,算法应该相当简单和高效。 – Groo

+0

库存主要包含带参数的目录列表,如果文件已被删除,将会有一个缺失的项目,但顺序是相同的,谢谢。 – OwenS

7

非常简单的方法,假设类似意味着等于

var file1Lines = File.ReadLines(file1Path); 
var file2Lines = File.ReadLines(file2Path); 
IEnumerable<String> inFirstNotInSecond = file1Lines.Except(file2Lines); 
IEnumerable<String> inSecondNotInFirst = file2Lines.Except(file1Lines); 

您可以使用foreach枚举线。

+0

如果OP假设证明这个假设是正确的,我将upvote – Hardrada

+0

请注意,您需要通过'ToList()'实现查询,或者使用File.ReadAllLines而不是'ObjectDisposedException',如果您想要使用两个序列。 'File.ReadLines'流式传输线,一旦你完成基础流被关闭。尽管如此,我仍然在展示'ReadLines',因为它在内存消耗方面是最好的选择。 –

+0

ReadLines和ReadAllLines之间没有性能差异吗?如果15000l的文件没有差别,我将使用readAllLines,谢谢 – OwenS

1

您可以使用Google的this差异库。查看使用2个字符串并返回差异列表的diff_main方法。

相关问题