2014-02-20 52 views
1

好了,所以我有一個文本文件,該文本文件中有一些字符串數據,我要讀的文本文件看起來像這樣:vb.net的StreamReader跳出循環

start log 

start day = 121010 

begin detect 

1  121010 05 00 21 50 3 00 

2  121010 04 01 21 30 2 00 

3  121010 04 01 22 40 1 01 

什麼我在做的是用流讀取器讀取日誌文件,並且爲每行讀取設置條件,如果該行有任何字母或特殊字符,它將跳過它並移動到下一行,並且如果行長度比我指定然後它也會跳過它。這裏是我的代碼這樣做:

If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then 
     Dim filename As String = OpenFileDialog1.FileName 
     Dim line As String 
     Dim num As Integer 
     Dim disaprovedcharacters As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.,:[email protected]#$%^&*()_-+=[]''?<>\|" 
     Using sr As New StreamReader(filename) 
      While Not sr.EndOfStream 
       line = sr.ReadLine 
       If line.Length > 10 Then 
        If Not line.LastIndexOfAny(disaprovedcharacters.ToCharArray) <> -1 Then 
         Using sr2 As New StreamReader(filename) 
          num = line.Substring(0, 5) 
         End Using 
        End If 
       End If 
      End While 
     End Using 
    End If 

這對我的作品很大,該行現在將有一個價值:

1  121010 05 00 21 50 3 00 

的問題是,我想設置的前5個字符(注意空格)在字符串的第一行(「開始日誌,開始日期等」之後的行)。我已經通過使用:

num = line.substring(0, 5) 

它顯示我正確的數字。唯一的問題是,如何在找到字符串中的第一行後停止while循環。例如,while循環將運行,直到它到達字符串的第一行,然後停止運行。因爲我需要的只是第一個數字,在這個例子中是「1」。但是消息框會顯示「1」,然後是「2」等,因爲while循環正在運行,直到文件結束。

任何幫助,將不勝感激,如果我沒有任何意義,請讓我知道,但我試圖解釋它儘可能簡單。

+1

該StreamReader的目的是什麼?它正在被打開(sr2),但從未用於定界?爲什麼要打開同一個文件兩次? –

+0

哎呀,沒有看到,謝謝。 –

回答

3

使用Exit While

While Not sr.EndOfStream 
    line = sr.ReadLine 
    If line.Length > 10 Then 
     If Not line.LastIndexOfAny(disaprovedcharacters.ToCharArray) <> -1 Then 
      Using sr2 As New StreamReader(filename) 
       num = line.Substring(0, 5) 
       Exit While 
      End Using 
     End If 
    End If 
End While 

MSDN:

立即從它所在的while循環。執行 繼續執行End While語句後面的語句。退出 雖然只能在While循環中使用。當在嵌套循環中使用時,Exit While將控制權交給一個循環,該循環是發生Exit While的循環上面的嵌套級別 。

+0

這就解決了,謝謝! –

+0

該StreamReader的目的是什麼?它正在被打開(sr2),但從未用於定界?爲什麼要打開同一個文件兩次? –