2014-02-20 139 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),但从未用于定界?为什么要打开同一个文件两次? –