Streamreader - Читать следующую строку - PullRequest
0 голосов
/ 09 ноября 2018

Я новичок в VB.NET, поэтому простите меня, если это простой вопрос.

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

' Set Properties of OpenFileDialog
With OpenFileDialog1
    .FileName = ""
    .Title = "Open Text File"
    .InitialDirectory = "c:\"
    .Filter = "Text files|*.txt"
    .ShowDialog()
End With

' Populate Textbox with Selected Text File Contents
txtMain.Text = File.ReadAllText(OpenFileDialog1.FileName)

Затем я хочу прочитать каждую строку файла и проверить первые 3 символа.Если первые 3 символа являются «LAX», то я знаю, что следующая строка файла должна начинаться с «CHI»

. Поэтому я хочу прочитать каждую строку, а если она начинается с «LAX», я хочупроверьте следующую строку файла, чтобы убедиться, что первые 3 символа являются "CHI". Если это не так, я хочу удалить любые разрывы строк / возврат каретки из строки "LAX", чтобы она перенесла следующую строку в конец этогоодин.Затем я хочу повторить эту задачу, пока первые 3 символа следующей строки не будут обозначены как «CHI»

В основном это гарантирует, что все, что связано с LAX, находится на одной строке, так как в настоящее время это разбивается на несколько строк вфайл.

Это то, что у меня так далеко, но я застрял с тем, что делать дальше.

Using streamReader As New StreamReader(OpenFileDialog1.FileName)

    While Not streamReader.EndOfStream
        Dim line As String = streamReader.ReadLine()
        If line.StartsWith("LAX") Then
            ' Go to end of this line and remove CR or LF. Then repeat the process for the next line down until the next line down starts with "CHI"
        End If
    End While
End Using

Имеет ли это смысл?

СпасибоВы заранее.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Мой ввод (содержимое Test.txt)

something1
LAX something2
CHI something3
LAX something4
something5
something6
CHI something7
something8

Мой вывод (содержимое TextBox1)

something1
LAX something2
CHI something3
LAX something4 something5 something6
CHI something7
something8

Код

Dim line As String = ""
Using streamReader As New StreamReader(OpenFileDialog1.FileName)
     Dim previousLine As String = ""
     While Not streamReader.EndOfStream
         Dim nextLine = streamReader.ReadLine()
         If nextLine.StartsWith("LAX") Or nextLine.StartsWith("CHI") Then
             line &= Environment.NewLine & nextLine
             previousLine = nextLine
         ElseIf previousLine.StartsWith("LAX") Then
             line &= " " & nextLine
         Else
             ine &= Environment.NewLine & nextLine
         End If
     End While
End Using
TextBox1.Text = line
0 голосов
/ 09 ноября 2018

Вместо того, чтобы повторять подобные строки, найдите индекс CHI, исправьте все до него и возьмите все после него. Имеет ли это смысл?

' sample text I made up from your description. correct it if it's wrong
Dim text =
$"LAX{Chr(10)}ABC
D{Chr(10)}EFGH{Chr(13)}I
JCHIKLMNOP
QRST
UVW
XY
Z"
' write it to a file
File.WriteAllText("file.txt", text)
' read it back, the rest of the code would be like yours
Dim textFromFile = File.ReadAllText("file.txt")
Dim indexOfChi = textFromFile.IndexOf("CHI")
Dim result = String.Concat(textFromFile.Take(indexOfChi))
' remove line feeds
result = String.Concat(result.Replace(Chr(10), String.Empty))
' remove carriage returns too (these can be done in one line with vbCrLf or Environment.NewLine)
result = String.Concat(result.Replace(Chr(13), String.Empty))
result &= Environment.NewLine & String.Concat(textFromFile.Skip(indexOfChi))
MessageBox.Show(result)

По общему признанию, это не самый эффективный код, но, похоже, он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...