区别和合并2个文本文件

时间:2016-06-07 22:23:56

标签: c# text

所以我有一个时间有限的问题(子程序应该尽可能快)这样做。在文件的任何一点,我都有2个网络文件,如下所示:

Time: 23.369
1464953512
Bytes: 4193304
Time: 24.369
1464953502
Bytes: 4194304

Time: 24.369
1464953502
Bytes: 4194304
Time: 25.404
1464953527
Bytes: 4194304

请注意,2个文件不同,每个文件都包含一部分信息,我需要合并这两个文件以创建累积信息(删除重复项),如下所示:

Time: 23.369
1464953512
Bytes: 4193304
Time: 24.369
1464953502
Bytes: 4194304
Time: 25.404
1464953527
Bytes: 4194304

最快的方法是什么? (如果可能,请提供一些代码)。

感谢。

P.S。我正在看一些diff/merge libraries,但我认为这样做会有些过分。任何简单的.net / LINQ魔法都可以实现吗?此外,重复项是序列如图所示,并没有散布。

编辑: -ve选民请发表评论,以便我可以改进或以其他方式更改问题更合适。

2 个答案:

答案 0 :(得分:0)

如果这有助于任何人,我用它来找到2个文本文件的并集,在将它们转换为字符串枚举之前:

var dinfo = new DirectoryInfo(@"C:\http");
var files = dinfo.GetFiles("*.txt");
IEnumerable<string> _eValA = null;
IEnumerable<string> _eValB = null;

_eValA = File.ReadLines(@"C:\http\http1.txt");
_eValB = File.ReadLines(@"C:\http2.txt");

IEnumerable<String> union = _eValA.Union(_eValB);

//TODO: create file if does not exist
File.WriteAllLines(@"C:\http\union.txt", union.Cast<String>()); 

答案 1 :(得分:0)

您希望读取文件,在创建自定义类的实例时使用两个属性:Time和Bytes。在您的自定义类中,重写Equals和GetHashCode方法并让它们使用Time属性。例如:

public override int GetHashCode() {
    return Time.GetHashCode();
}

public override bool Equals(obj other) {
    //skipping type check and null check for brevity
    return Time.Equals(other.Time);
}

然后只需将您的商品添加到HashSet<YourCustomClass>即可。 HashSet不允许重复,因此您可以顺利进行。