0
我在C#2文本文件说:文件&文件B.我想这两个文件的内容进行比较,如果有在文件中发现的任何内容一个是存在于文件B然后我想删除文件B中的内容。比较C#2项文本文件的内容,并删除同一内容
那么如果有任何方法在C#中可以为我做到这一点,那么请让我知道?
我在C#2文本文件说:文件&文件B.我想这两个文件的内容进行比较,如果有在文件中发现的任何内容一个是存在于文件B然后我想删除文件B中的内容。比较C#2项文本文件的内容,并删除同一内容
那么如果有任何方法在C#中可以为我做到这一点,那么请让我知道?
如果你想行比较,你可以使用此查询:
var newLines = File.ReadLines(f2Path).Except(File.ReadLines(f1Path)).ToList();
File.WriteAllLines(f2Path, newLines);
编辑:根据您的评论(县)
我要排除所有行from file2其中id存在于file1中
您可以使用此left-outer-join与LINQ:
var idInF2 = from f2Line in File.ReadLines(f2Path)
join f1Line in File.ReadLines(f1Path)
on f2Line.Split(',')[0].Trim() equals f1Line.Split(',')[0].Trim() into gj
from lineOne in gj.DefaultIfEmpty()
where lineOne == null
select f2Line;
File.WriteAllLines(f2Path, idInF2.ToList());
或者你可以使用使用Contains
这更易读,但效率不高的方法:
var f1IDs = File.ReadLines(f1Path).Select(l => l.Split(',')[0].Trim());
var newLines = File.ReadLines(f2Path)
.Select(l => new { Line = l, ID = l.Split(',')[0].Trim() })
.Where(x => !f1IDs.Contains(x.ID))
.Select(x => x.Line).ToList();
File.WriteAllLines(f2Path, newLines);
TNX您的答复。但我的数据,例如:123,absdefgh ....(也许只要少数行,而不是1行)每行都有一个id,这是一个ineger然后分开,而长字符就是这个值id,并且下一个数据从另一行开始 –
@mahsamahdavi:那么你想排除file2中id存在于ID或字符串相同的所有行? –
我想从文件2排除所有行其中文件1 –