索引超出了数组的范围?

时间:2016-03-14 17:18:46

标签: arrays vb.net visual-studio-2013 listbox

我有一个文本文件(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数据,不可用服务,是,不正确的比尔,是,电视接收不良,不,不

感谢您的帮助和时间

1 个答案:

答案 0 :(得分:0)

可能是由于File.ReadLines()。该方法一次只能读取一些(或者甚至一条)行,这意味着它可以读取的数量少(如果它被分成行),而不是使得拆分返回至少19个元素的数组。您应该使用File.ReadAllLines()代替。

只需将File.ReadLines()替换为File.ReadAllLines()

For Each line As String In File.ReadAllLines("customers.txt")

如果这是一个大文件而你不想使用File.ReadAllLines(),你可以改为查看数组的结尾(如果" No"总是出现在那里),而不是有一个静态索引。

修改

实际上,如果你使用ReadLinesReadAllLines,你应该坚持从最后检查:

If data(data.Length - 1) = "No" Then
    lstReportsUnresolved.Items.Add(data(data.Length - 2))
End If