#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, я имею в виду, что вы должны написать свой код, чтобы делать то, что вы на самом деле хотите делать. Вы хотите, чтобы файл всегда содержал строку, содержащую «[Буквы]», и именно с нее вы хотите начать чтение, или иногда он будет содержать «[Буквы] еще какой-то произвольный текст здесь»? Если вы никогда не собираетесь иметь что-то подобное последнему, то зачем вам писать свой код для поиска чего-то подобного последнему? Если предполагается, что строка должна иметь именно указанное вами значение, то вам следует искать строки, которые являются именно такими, а не строки, которые начинаются с него и заканчиваются чем-либо вообще.