VB:尝试将csv读入datagrid时在数组的边界之外编制索引

时间:2018-08-07 11:24:53

标签: arrays vb.net csv

我正在尝试从csv文件的datagrid上打印,并且在PhNumber列上收到“ System.IndexOutOfRangeException:'索引超出数组范围。'”错误。当我删除此列时,错误将移至“年龄”列。我到底在做什么错?我以为我是如何编写csv的,这是一个错误,但是我已经检查了1000次,却找不到任何东西。

Vannessa Sanchez,23,Physics Methods Specialist,85.30,44 Garden Place KURRACA WEST Victoria 3518,(03) 9270 3392
Usnavi de la Vega,29,Biology Chemistry,90.55,66 Hebbard Street KNOXFIELD Victoria 3180,(03) 9270 3392
Benny Smith,24,Physics,88.35,31 Cambridge Street MULGRAVE Victoria,(03) 4745 6684
Nina Rosario,20,English History,88.75,96 Boughtman Street FERNTREE GULLY Victoria 3156,(03) 9293 4908
Alexander Hamilton,40,English,82.45,40 South Street HASTINGS Victoria 3915,03 5550 0388
Thomas Jefferson,32,French English,92.95,69 Parkes Road DANDENONG Victoria 3004,(03) 8694 7835
John Adams,57,Chemistry Methods,84.25,25 Hodgson St CLAYTON Victoria 3168,(03) 4560 8693
Eliza Schuyler,31,Physics Methods,94.95,68 Weigall Avenue OAKLEIGH VICTORIA 3166,(03) 8395 6353



Public Class Form1
Dim TutorTable As New DataTable
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    With TutorTable
        .Columns.Add("Name", System.Type.GetType("System.String"))
        .Columns.Add("Age", System.Type.GetType("System.String"))
        .Columns.Add("Subjects", System.Type.GetType("System.String"))
        .Columns.Add("ATAR", System.Type.GetType("System.String"))
        .Columns.Add("Location", System.Type.GetType("System.String"))
        .Columns.Add("PhNumber", System.Type.GetType("System.String"))
    End With
End Sub


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim Reader As New IO.StreamReader("D:\Users\user\Downloads\TutorData.csv", System.Text.Encoding.Default)
    Dim StringLine As String = ""
    Do
        StringLine = Reader.ReadLine
        If StringLine Is Nothing Then Exit Do
        Dim Columns() As String = StringLine.Split(",")
        Dim NewRow As DataRow = TutorTable.NewRow
        NewRow("Name") = Columns(0)
        NewRow("Age") = Columns(1)
        NewRow("Subjects") = Columns(2)
        NewRow("ATAR") = Columns(3)
        NewRow("Location") = Columns(4)
        NewRow("PhNumber") = Columns(5)
        TutorTable.Rows.Add(NewRow)
    Loop
    Reader.Close()

    DataGridView1.DataSource = TutorTable
    Me.Text = TutorTable.Rows.Count & "rows"
End Sub

1 个答案:

答案 0 :(得分:0)

在.Split之后立即检查Columns的长度。分支到功能来修复数据。

Private Sub OPCode()
        Dim Columns() As String = StringLine.Split(",")
        If Columns.Length < 6 Then
            ReDim Preserve Columns(5)
            Columns = FixMissingData(Columns)
        End If
        Dim NewRow As DataRow = TutorTable.NewRow
        'and the rest of your code
End Sub
Private Function FixMissingData(arrColumns As String()) As String()
        'Code to parse fields, probably using RegEx
        'reassign values to correct Columns index, fill empty data columns with and empty string or default value
        'such as "missing data"
        Return arrColumns
End Function