Сквозное текстовое поле lines начинается с чего-то и заканчивается чем-то

#vb.net

#vb.net

Вопрос:

в моем текстовом файле у меня есть следующие вещи: Я должен заставить его начинаться откуда-то и останавливаться в определенной точке. но он начинает только с этой точки, но он не знает, как остановиться в одной точке.

 [Letters]
A
B
C
D
E
[Loop]
[Words]
Fish
Facebook
Google
Youtube
  

Я должен отобразить ожидаемый результат:

 A
B
C
D
E
  

Тогда я должен заставить его отображаться

 Fish
Facebook
Google
Youtube
  

но это показывает мне:

 [Letters]
A
B
C
D
E
[Loop]
[Words]
Fish
Facebook
Google
Youtube
  

Код

    Dim line As String
        Using reader As StreamReader = New StreamReader(My.Application.Info.DirectoryPath amp; "TestReader.txt")
            line = reader.ReadLine
            Dim sb As New StringBuilder
            Do
                Do
                    If reader.Peek < 0 Then 'Check that you haven't reached the end
                        Exit Do
                    End If
                    line = reader.ReadLine
                    If line.StartsWith("[Letters]") AndAlso line.EndsWith("[Loop]") Then 'Check if we have reached another check box.
                        Exit Do
                    End If
                    sb.AppendLine(line)
                Loop
                TextBox1.Text = sb.ToString
            sb.Clear()
            Loop Until reader.Peek < 0
        End Using
  

Комментарии:

1. чтобы оно отображало A B C D E, теперь оно отображает их все. то есть, чтобы иметь возможность запускать его откуда-то и останавливать там, где они хотят. то есть, как только я отобразил [Буквы] и использую этот код, я могу изменить его для отображения [Слов]

2. Начать с [Букв], то есть отобразить A B C D E и остановить его на [Словах]

3. Если вы начинаете с [БУКВ] и останавливаетесь на [СЛОВАХ], то почему бы не включить [ЦИКЛ]?

Ответ №1:

Это предполагает, что startPrefix и endPrefix всегда будут присутствовать в файле:

 Dim startPrefix As String 'Set as required
Dim endPrefix As String 'Set as required

Dim lines As New List(Of String)

Using reader As New StreamReader("file path here")
    Dim line As String

    'Skip lines up to the first starting with the specified prefix.
    Do
        line = reader.ReadLine()
    Loop Until line.StartsWith(startPrefix)

    line = reader.ReadLine()

    Do Until line.StartsWith(endPrefix)
        lines.Add(line)
        line = reader.ReadLine()
    Loop
End Using

'Use lines here.
  

Вы действительно уверены, что хотите искать строки, которые начинаются с этих маркеров? Разве вы действительно не предпочли бы искать строки, равные этим маркерам?

Редактировать:

Вы могли бы — и, вероятно, должны — инкапсулировать эту функциональность в метод:

 Private Function GetLinesBetween(filePath As String, startPrefix As String, endPrefix As String) As String()
    Dim lines As New List(Of String)

    Using reader As New StreamReader(filePath)
        Dim line As String

        'Skip lines up to the first starting with the specified prefix.
        Do
            line = reader.ReadLine()
        Loop Until line.StartsWith(startPrefix)

        line = reader.ReadLine()

        'Take lines up to the first starting with the specified prefix.
        Do Until line.StartsWith(endPrefix)
            lines.Add(line)
            line = reader.ReadLine()
        Loop
    End Using

    Return lines.ToArray()
End Function
  

Комментарии:

1. Я точно не знаю, что он имеет в виду. улучшается ли код, чтобы работать быстрее?

2. @FatirRizky, я имею в виду, что вы должны написать свой код, чтобы делать то, что вы на самом деле хотите делать. Вы хотите, чтобы файл всегда содержал строку, содержащую «[Буквы]», и именно с нее вы хотите начать чтение, или иногда он будет содержать «[Буквы] еще какой-то произвольный текст здесь»? Если вы никогда не собираетесь иметь что-то подобное последнему, то зачем вам писать свой код для поиска чего-то подобного последнему? Если предполагается, что строка должна иметь именно указанное вами значение, то вам следует искать строки, которые являются именно такими, а не строки, которые начинаются с него и заканчиваются чем-либо вообще.