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