2012-07-31 58 views
1

是否可以在循环内移动到下一行或临时读取下一行?我没有找到任何有用的数据说明我会如何做到这一点,我的猜测是以某种方式找到您当前所在行的行号(索引),然后从您所在的位置读取+1。移动到StreamReader中的下一行

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

你可以用'System.IO.File.ReadAllLines()'在内存中读取整个文件。 – ja72 2012-07-31 14:53:47

回答

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 
+0

确保你不要在空集合中偷看。 – ja72 2012-07-31 15:04:32

+0

这个和NoAlias的答案都很棒。我要先试试这个,看看它是如何工作的。我很感谢:) – 2012-07-31 15:23:23

+0

最终我最终使用你的。谢谢你的回答! – 2012-07-31 15:51:17

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