StreamReader только читает и выводит последнюю строку из многострочного текстового файла - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь прочитать значения из текстового файла и ввести их в массив, откуда я могу назначить их для текстовых полей.Мой текстовый файл имеет первую строку в качестве имени заголовка (строка / символ), и все последующие строки содержат числа:

picture of text

Есть несколько строк, и каждое значение разделено белым-пространство.Мой текущий код:

If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
     Dim openreader As System.IO.StreamReader = New System.IO.StreamReader(openFileDialog1.FileName)
    Try

        While Not openreader.EndOfStream
            Dim currentline As String
            currentline = openreader.ReadLine()
            currentline = currentline.Trim(" "c)
            Dim inputparts() As String = currentline.Split(" "c)
            TextBox1.Text = inputparts(0)
            TextBox2.Text = inputparts(1) 'This gives out of bounds error
            TextBox3.Text = inputparts(2) 'This gives out of bounds error
            TextBox4.Text = inputparts(3) 'This gives out of bounds error
        End While

    Catch Ex As Exception
        MessageBox.Show("The file could not be read. The original error is: " & Ex.Message)
    End Try
    openreader.Close()
    End If

Проблема с этим заключается в том, что у inputparts массива есть ошибка выхода за границы для чего-либо выше, чем inputparts (0) и inputparts (0), который является единственным записанным элементом,всегда самый последний номер последней строки.Я не хотел определять размеры inputparts (), так как я был моим входным файлом, чтобы иметь свободу иметь диапазон различных значений.

Почему массив не записывает никаких значений, кроме последнего - это потому, что моя текущая строка заканчивается последней строкой - и как я могу это исправить?Любая помощь будет оценена!

1 Ответ

0 голосов
/ 20 февраля 2019

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

С помощью Math.Min мы можем быть уверены, что если в строке недостаточно элементов, то мы не пытаемся установить для текста то, чего не существует.

Using openreader As StreamReader = New StreamReader(openFileDialog1.FileName)
    Dim tb = {TextBox1, TextBox2, TextBox3, TextBox4}

    Try
        While Not openreader.EndOfStream
            Dim currentline As String
            currentline = openreader.ReadLine()
            currentline = currentline.Trim(" "c)
            Dim inputparts() As String = currentline.Split(" "c)

            For i = 0 To Math.Min(tb.Length, inputparts.Length)
                tb(i).Text = inputparts(i)
            Next

        End While

    Catch ex As Exception
        MessageBox.Show("The file could not be read. The original error is: " & ex.Message)
    End Try

End Using

Я использовал Using, потому что он гарантирует, что файл будет закрыт, даже если возникнет исключение.

Если вы добавите Imports System.IO в самый верх кода, вам не нужно будет набирать его в таких вещах, какSystem.IO.StreamReader.

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