我的.txt文件有问题。 它有相同的文字,除了一个说" Kleur",另一个说" Binair"。
我需要阅读该.txt文件中的所有行,但需要跳过带有" kleur"在它。
以下是我的代码示例:
For Each f In dinfo.GetFiles("*.txt", SearchOption.AllDirectories)
Using sr As New StreamReader(f.FullName)
Dim findstring = IO.File.ReadAllText(f.FullName)
Dim Lookfor As String = "Binair"
If findstring.Contains(Lookfor) Then
End If
但是这并没有跳过kleur行,代码仍然对它做了一些事情。
有人可以帮助我跳过这些行,并且只能使用行" binair"在它?
答案 0 :(得分:1)
如果你想逐行删除不需要的行来应用一些逻辑,那么逐行读取文件或在内存中读取它们之后处理一行(选择取决于文件大小)
这种方法使用IEnumerable扩展在ReadLines返回的行上的位置(返回行的IEnumerable并且不会将它们全部加载到内存中)。
For Each f In dinfo.GetFiles("*.txt", SearchOption.AllDirectories)
Dim lines = File.ReadLines(f.FullName).
Where(Function(x) Not x.Contains("Kleur"))
' lines contains only the lines without the word Kleur
For Each l As String In lines
' Process the lines
Next
Next
但您也可以使用StreamReader读取单行,如果需要则处理它,然后循环下一行
Dim line As String = ""
For Each f In dinfo.GetFiles("*.txt", SearchOption.AllDirectories)
Using sr = New StreamReader(f.FullName)
While True
line = sr.ReadLine
If line IsNot Nothing Then
If Not line.Contains("Kleur") Then
' process the line
End If
Else
Exit While
End If
End While
End Using
Next
最后,你可以从内存加载所有内容并处理(但要注意文件的大小)
Dim line As String = ""
For Each f In dinfo.GetFiles("*.txt", SearchOption.AllDirectories)
Dim lines = File.ReadAllLines(f.FullName)
For each line in lines
if Not line.Contains("Kleur") Then
' process the line
End If
Next
Next