比较两个文本文件的特定列值-C#

比较两个文本文件的特定列值-C#,c#,text-files,string-comparison,C#,Text Files,String Comparison,我有一个案例,需要比较两个文本文件(使用C#)、一个传入文本文件和一个现有文本文件,检查更改/差异。两个文本文件具有相同的布局、6列相同类型的数据和列标题。因此,这基本上是一个检查,看看传入文件的内容与现有文件相比是否有任何新数据 File.ReadAllText方法基本上实现了我想要的功能,但问题是,我只想比较文本文件前两列中的值,而忽略后面的其他列 文本文件布局如下所示: 项目#|总计C3 | C4 | C5 | C6 123 | 70 | 0 | 0 因此,如果第一个文件中的Item#或T

我有一个案例,需要比较两个文本文件(使用C#)、一个传入文本文件和一个现有文本文件,检查更改/差异。两个文本文件具有相同的布局、6列相同类型的数据和列标题。因此,这基本上是一个检查,看看传入文件的内容与现有文件相比是否有任何新数据

File.ReadAllText
方法基本上实现了我想要的功能,但问题是,我只想比较文本文件前两列中的值,而忽略后面的其他列

文本文件布局如下所示:

项目#|总计C3 | C4 | C5 | C6

123 | 70 | 0 | 0

因此,如果第一个文件中的Item#或Total列与第二个文件相比发生了更改,则文件的比较应到此为止,并应将其视为文件更改


一个简单的方法是什么?非常感谢。

当您使用和LINQ's and时,这是一个很容易解决的问题


我将为每个项目创建一个类:

class Item
{
    public int ItemNumber { get; set; }
    public int Total { get; set; }
}
然后使用列表并比较数据

List<Item> items = new List<Item>();
foreach (String line in File.ReadAllLines("filepath"))
{
    Item item = new Item
    {
         ItemNumber = Convert.ToInt32(line.Split('|')[0]),
         Total = Convert.ToInt32(line.Split('|')[1])
    };
}
List items=newlist();
foreach(File.ReadAllLines(“filepath”)中的字符串行)
{
项目=新项目
{
ItemNumber=Convert.ToInt32(line.Split(“|”)[0]),
总计=转换.ToInt32(行.拆分(“|”)[1])
};
}

然后你就有了一个坚实的结构来将它们与

你尝试的内容和你被击中的地方进行比较?每个文件中只有一行?嗨@Sriram Sakthivel,我尝试使用file.ReadAllText,但我相信其他列(不是C1或C2)可能会有值更改,我希望这些列中的任何更改都被忽略。嗨@King King,不,每个文件中都有多行。我会在一个文件中使用
file.ReadLines
,那么你不需要先将两个文件读入内存,即使
长度或第一行已经不同。@TimSchmelter,既然你提到了它,为什么不在两个文件上都使用
File.ReadLines
?因为您需要将两行相互比较,如果在两个文件上都使用
ReadLines
,则始终需要枚举所有行以找到正确的索引。您可以在延迟行上使用
foreach
,在数组上使用索引器。编辑甚至更重要:由于基础读取器在第一次使用后被释放,因此您不能多次对
读线进行材料化或枚举。@TimSchmelter您可以手动使用枚举器来逐步处理这两个枚举。我已经添加了一个这样的例子。@TimSchmelter实际上,我认为最好使用
SequenceEqual
重载,该重载使用一个相等比较器来比较前两项:得到延迟加载的文件,并清除逻辑。:)
class Item
{
    public int ItemNumber { get; set; }
    public int Total { get; set; }
}
List<Item> items = new List<Item>();
foreach (String line in File.ReadAllLines("filepath"))
{
    Item item = new Item
    {
         ItemNumber = Convert.ToInt32(line.Split('|')[0]),
         Total = Convert.ToInt32(line.Split('|')[1])
    };
}