使用特定字

时间:2017-05-23 11:56:33

标签: vb.net loops streamreader

我的.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"在它?

1 个答案:

答案 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