2014-02-20 2 views
1

Ok, так что у меня есть текстовый файл, текстовый файл имеет некоторые строковые данные в нем, что я должен прочитать, текстовый файл выглядит следующим образом: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. При использовании внутри вложенных While Loops, Exit While передает управление в цикл, который равен , вложенному уровню выше цикла, в котором происходит Exit While.

+0

Это решено, спасибо! –

+0

Какова цель этого внутреннего StreamReader? Он открывается (sr2), но никогда не используется для чего-либо? Зачем открывать тот же файл дважды? –

Смежные вопросы