如何比较文本文件中的字符串

时间:2013-12-03 21:42:42

标签: vb.net visual-studio file-io filestream

我正在学习阅读文本文件,Streamreader是迄今为止我所知道的唯一一个课程。 到目前为止,我已经看到这个类允许我逐行(.ReadToEnd)或逐字符(.ReadLine)读取整个文件(.Read)。

但是我无法想象如何阅读,分隔的子串并解决这个问题:

(以下4行是textfile.txt的内容)

COLUMN1,MAIL1,COLUMN3,COLUMN4,COLUMN5,MAIL2
".","user@DOMAIN.EDU.PE","1","2013-05-08 00:00:00","0","user@DOMAIN.EDU.PE"
".","id@DOMAIN1.COM.PE","1","2013-05-08 00:00:00","0","HADSA7@DOMAIN1.COM.PE"
".","myid@DOMAIN2.COM.PE","1","2013-05-08 00:00:00","0","4671@DOMAIN2.COM.PE"

如果第一个电子邮件地址等于第二个,请执行:

Numberofmatched=Numberofmatched+1

如果不是

Numberofunmatched=Numberofunmatched+1

考虑到域名可以更改,电子邮件地址有可变长度。

任何帮助?

1 个答案:

答案 0 :(得分:1)

这是另一种读取文本文件的方法。您可以使用System.IO.File class,例如File.ReadLines / File.ReadAllLinesFile.ReadAllText

使用String.Split获取String(),每列一个字符串。由于分隔符似乎是,而不是"使用String.Split(","c)

您可以使用以下LINQ查询来提高可读性:

Dim allLines = File.ReadAllLines("Path")
Dim data = From line In allLines.Skip(1) ' skip the header-line
           Where Not String.IsNullOrWhiteSpace(line)
           Let fields = line.Split(","c)
           Where fields.Length = 6
           Select fields

Dim Numberofmatched As Int32 = data.Count(Function(fields) fields(1) = fields(5))
Dim Numberofunmatched As Int32 = data.Count(Function(fields) fields(1) <> fields(5))

请注意,您应该使用可用的CSV解析器而不是重新发明轮子,因为它们支持引用字符和许多其他内容。 Visual Basic基础名称空间中值得推荐的是TextFieldParser类。