C#比较匹配的2个文件子串

时间:2017-05-15 16:56:15

标签: c#

我正在尝试找到一种方法来比较2个文件中的某些文本以及是否找到匹配项。

以下是文件示例;

'文件A'

EX1,TEXAS,24

EX2,迈阿密,78

EX3,亚特兰大,56

EX4,NY,90

...

'文件B'

EX1,JHON,1110

EXA,DAVID,1060

EXB,CATHY,230

EX4,ROBERT,1200

...

使用我的2个示例文件,我想要搜索它们并找到匹配项(

EX1,TEXAS,24

&安培;

EX4,NY,90

)??!

这是我的尝试

'sample' | 'django'

2 个答案:

答案 0 :(得分:0)

var matches = File.ReadAllText(fileA).Split(',')
    .Intersect(File.ReadAllText(fileB).Split(','));

答案 1 :(得分:0)

您可以使用File.ReadAllLines将文件的所有行放到数组中:

var alphaFileContents = File.ReadAllLines(fileA);

在您的代码中,您正在检查文件A StartWith中哪些项目与文件B中的项目相同,直到第一个逗号。我们可以使用string.Split(',')[0]从fileB获取所有前缀(行内容直到第一个逗号),它将字符串拆分为逗号字符上的数组,然后返回第一个项目(在索引{{1}处) }):

0

现在,我们可以通过获取fileA中以fileB中的项开头的所有项来找到类似项。下面的var betaFilePrefixes = File.ReadAllLines(fileB).Select(line => line.Split(',')[0]); 子句代表"其中任何Where项目都以alpha中的项目开头:

betaFilePrefixes

然后,您可以使用var similarItems = alphaFileContents .Where(alpha => betaFilePrefixes.Any(beta => alpha.StartsWith(beta))); 将所有匹配行写入results文件:

File.WriteAllLines

所以,总而言之,你可以这样做:

File.WriteAllLines(fileC, similarItems);