StreamReader 仅从多行、间隔文本文件中读取和输出最后一行
StreamReader Only Reads and Outputs Last Line From MultiLine, Spaced Text File
我正在尝试从文本文件中读取值并将它们输入到数组中,然后我可以将它们分配给文本框。我的文本文件的第一行是标题名称 (string/char),所有后续行都包含数字:
有多行,每个值由 white-space 分隔。我当前的代码是:
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() 的维度,因为我是我的输入文件,可以自由地拥有一系列不同的值。
为什么数组不记录除最后一个值之外的任何值 - 是因为我的当前行最终成为最后一行 - 我该如何解决这个问题?任何帮助,将不胜感激!
将来自拆分的部分放入文本框的一种方法是引用数组中的文本框,并从行中的项目数组中设置它们。
使用 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
.
之类的内容
我正在尝试从文本文件中读取值并将它们输入到数组中,然后我可以将它们分配给文本框。我的文本文件的第一行是标题名称 (string/char),所有后续行都包含数字:
有多行,每个值由 white-space 分隔。我当前的代码是:
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() 的维度,因为我是我的输入文件,可以自由地拥有一系列不同的值。
为什么数组不记录除最后一个值之外的任何值 - 是因为我的当前行最终成为最后一行 - 我该如何解决这个问题?任何帮助,将不胜感激!
将来自拆分的部分放入文本框的一种方法是引用数组中的文本框,并从行中的项目数组中设置它们。
使用 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
.