移至StreamReader中的下一行

时间:2012-07-31 14:44:26

标签: vb.net loops streamreader readline

循环中是否可以移动到下一行或暂时读取下一行?我没有太多运气找到有关如何做到这一点的任何有用数据,我的猜测是以某种方式找到你当前所在行的行号(索引),然后从你所在的地方读取+1。

Using TestFile As New IO.StreamReader(My.Settings.cfgPath & "tempRPT.txt", System.Text.Encoding.Default, False, 4096)
        Do Until TestFile.EndOfStream
            ScriptLine = TestFile.ReadLine
            ScriptLine = LCase(ScriptLine)
            If InStr(ScriptLine, "update: [b") Then
                Dim m As Match = Regex.Match(ScriptLine, "\(([^)]*)\)")
                builder.AppendLine(m.Value)

                'This is where it would move to next line temporarily to read from it
                If InStr(ScriptLine, "hive: write:") > 0 Or InStr(ScriptLine, "update: [b") > 0 Then 'And InStr(ScriptLine, "setmarkerposlocal.sqf") < 1 Then
                   builder.AppendLine(ScriptLine)

                End If
            End If

        Loop
    End Using

2 个答案:

答案 0 :(得分:3)

试试这个。真实所有行并将它们放在Queue(Of T)对象中。

    Dim path As String = My.Settings.cfgPath & "tempRPT.txt"

    Dim lines As String() = IO.File.ReadAllLines(path, System.Text.Encoding.Default)
    Dim que = New Queue(Of String)(lines)

    Do While que.Count > 0
        ScriptLine = que.Dequeue()
        ScriptLine = LCase(ScriptLine)
        If InStr(ScriptLine, "update: [b") Then
            Dim m As Match = Regex.Match(ScriptLine, "\(([^)]*)\)")
            builder.AppendLine(m.Value)

            Dim next_line As String = que.Peek      'Read next line temporarily                'This is where it would move to next line temporarily to read from it
            If InStr(next_line, "hive: write:") > 0 Or InStr(next_line, "update: [b") > 0 Then 'And InStr(next_line, "setmarkerposlocal.sqf") < 1 Then
                builder.AppendLine(next_line)
            End If
        End If
    Loop

答案 1 :(得分:1)

假设您没有使用旧版本的.Net,您可能会发现使用字符串列表更容易。

Dim lstLinesInTextFile As List(of String) = IO.File.ReadAllLines(My.Settings.cfgPath & "tempRPT.txt").ToList()

        Dim intCursor As Integer = 0
        For Each strLine As String In lstLinesInTextFile

            'Perform Logic Here

            'To View Next Line:
            If lstLinesInTextFile.Count > intCursor + 1 Then

                Dim strNextLine As String = lstLinesInTextFile(intCursor + 1)

                'Perform Logic Here.

            End If

            intCursor += 1

        Next