我有一个文本文件(customers.txt),我正在尝试从列表框中提取某些数据(lstReportsUnresolved)。我正在使用逗号分隔文本框中的行和某个分割,如果文本等于“否”,则将前一个分割添加到列表框中。
代码:
Private Sub btnUnresolved_Click(sender As Object, e As EventArgs) Handles btnUnresolved.Click
For Each line As String In File.ReadLines("customers.txt")
Dim data As String() = line.Split(",")
If data(18) = "No" Then
lstReportsUnresolved.Items.Add(data(17))
End If
If data(20) = "No" Then
lstReportsUnresolved.Items.Add(data(19))
End If
If data(22) = "No" Then
lstReportsUnresolved.Items.Add(data(21))
End If
If data(24) = "No" Then
lstReportsUnresolved.Items.Add(data(23))
End If
Next
End Sub
之前工作正常,但我回来了,现在尝试运行它并停止并突出显示行If data(18)="No" Then
,并在第二学期项目中出现错误“类型为'System.IndexOutOfRangeException'的未处理异常.exe“附加信息说”索引超出了数组的范围。“
以下是文本文件中一行的示例 Mark,Barry,07/04/1996,Redbrook,Sandymount,Dublin,Ireland,094-378231,085-0983623,markbarry96 @ gmail.com,Basic Cable,VB Fiber Broadband,VB Sports,VB Movies,Chat Chat Phone,VB任何地方,VB数据,不可用服务,是,不正确的比尔,是,电视接收不良,不,不
感谢您的帮助和时间
答案 0 :(得分:0)
可能是由于File.ReadLines()
。该方法一次只能读取一些(或者甚至一条)行,这意味着它可以读取的数量少(如果它被分成行),而不是使得拆分返回至少19个元素的数组。您应该使用File.ReadAllLines()
代替。
只需将File.ReadLines()
替换为File.ReadAllLines()
:
For Each line As String In File.ReadAllLines("customers.txt")
如果这是一个大文件而你不想使用File.ReadAllLines()
,你可以改为查看数组的结尾(如果" No"总是出现在那里),而不是有一个静态索引。
修改强>
实际上,如果你使用ReadLines
或ReadAllLines
,你应该坚持从最后检查:
If data(data.Length - 1) = "No" Then
lstReportsUnresolved.Items.Add(data(data.Length - 2))
End If