我有一个文本文件,看起来像这样:
Name : <John Doe> First field in group
Rank : <Private>
DOB : <1/25/92>
etc
etc
etc
55 more fields
Retired : <Y> Last field in group
第2部分看起来类似于:
Additional Data 1
field 1 : <some data>
field 2 : <more data>
field 3 : <still more data>
Additional Data 2
field 1 : <some data>
field 2 : <more data>
field 3 : <still more data>
Additional Data 3
field 1 : <some data>
field 2 : <more data>
field 3 : <still more data>
.... up to 10 groups of additional data
我正在使用StreamReader读取文件,那里没有问题 我正在使用split函数提取字段名称和字段值,那里没有问题。 我在表单上有61个字段,它们的名称分别是fld_1,fld_2,fld_3等 我的问题是尝试使用每个值填充表单,并在最后一个字段“退休”处停止
我尝试使用StreamReader进行拆分,它采用fieldValue并将其放在表单上的适当文本框中。
Public Sub reader()
Dim x as Interger = 1
Using objReader as New StreamReader("C:\temp\testFile.txt")
Do While objReader.Peek() <> -1
Dim line As String = objReader.ReadLine()
If line.Contains(":") Then
Dim splitLine() as String = line.Split(":")
Dim fieldName as String = splitLine(0)
Dim fieldValue as String = splitLine(1)
Dim txtBox as TextBox
Dim name As String = "fld_" * x.ToString
txtBox = Controls.Item(name)
txtBox.Text = fieldValue
If Not objReader.EndOfStream then
line = objReader.ReadLine
End If
End If
x = x + 1
Loop
End Using
End Sub
答案 0 :(得分:1)
您实际上并没有检查从文件读取的行的内容。
记录的起始行包含 Name
,最后一条包含 Retired
。让我们查找这些字符串,并在找到它们时执行所需的操作。
我认为这是一个错字;尝试将字符串相乘不是那么有用:
Dim name As String = "fld_" * x.ToString
使用StreamReader语句初始化using:需要处理该对象。 启动一个循环以读取文本行,直到找到记录的开始或StremReader到达文件的末尾为止;在这种情况下,请退出该过程。
然后,继续阅读文本行,直到找到StartsWith() Retired
的行。
Private Sub fileReader(filePath as String)
Dim comp = StringComparison.InvariantCultureIgnoreCase
Dim lineContent As String = String.Empty
Dim line As Integer = 1
Using reader = New StreamReader(filePath)
Do
lineContent = reader.ReadLine
Loop While Not (reader.EndOfStream OrElse lineContent.StartsWith("Name", comp))
If reader.EndOfStream Then Return
Controls($"fld_{line}").Text = lineContent.Split(":"c)(1).Trim()
While Not lineContent.StartsWith("Retired", comp)
line += 1
lineContent = reader.ReadLine
Controls($"fld_{line}").Text = lineContent.Split(":"c)(1).Trim()
End While
End Using
End Sub
此行代码使用字符串插值:
Controls($"fld_{line}").Text = ...
在您的VB.Net版本不允许的情况下,请使用string.Format()
:
Controls(String.Format("fld_{0}", line)).Text = ...