0

CSVファイルから読み取る大学向けのWPFアプリケーションをコーディングする必要があります。CSV の行の一部を配列に出力しようとすると、null 参照例外が発生します。コメントでエラーが発生する行を見つけることができます。これがコードです。

Imports System.Windows.Forms
Imports System.IO
Imports System.Globalization

Class MainWindow
Private foldername As String
Private arrGemeenten As String()
Private arrOppervlakte As Double()
Private arrInwoners As Integer()
Private arrDeelgemeenten As Integer()


Private Sub cboProvincie_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles cboProvincie.SelectionChanged
    CSVInlezen()
End Sub

Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded


    FileBrowserAanmaken()
    comboBoxVullen()

End Sub



Private Sub comboBoxVullen()
    For Each file As String In IO.Directory.GetFiles(foldername)

        If file.EndsWith(".csv") Then
            Dim filenaam As String = System.IO.Path.GetFileNameWithoutExtension(file)
            cboProvincie.Items.Add(filenaam)
        End If

    Next
End Sub

Private Sub FileBrowserAanmaken()
    'folderbrowserdialog aanmaken
    Dim fbd As New FolderBrowserDialog

    fbd.SelectedPath = AppDomain.CurrentDomain.BaseDirectory


    ' Show the FolderBrowserDialog. 

    Dim result As DialogResult = fbd.ShowDialog()

    If (result = Forms.DialogResult.OK) Then
        foldername = fbd.SelectedPath
    End If
End Sub



Private Sub CSVInlezen()
    Dim filepath As String = foldername & "\" & cboProvincie.SelectedValue & ".csv"
    If File.Exists(filepath) Then
        fileInlezenHulpMethode(filepath)
    End If
End Sub

Private Sub fileInlezenHulpMethode(ByVal path As String)
    'declarations
    Dim sr As New StreamReader(path)
    Dim iTeller As Integer = 0
    Dim arrLijn As String()
    Dim culture As New System.Globalization.CultureInfo("nl-BE")

    'eerste lijn meteen uitlezen, dit zijn kolomkoppen en hebben we niet nodig
    'read out first line, these are titles and we don't need them
    sr.ReadLine()

    Do While sr.Peek <> -1
        Dim lijn As String = sr.ReadLine()
        arrLijn = lijn.Split(";")
        arrGemeenten(iTeller) = Convert.ToString(arrLijn(0)) 'HERE I GET THE ERROR!
        arrOppervlakte(iTeller) = Double.Parse(arrLijn(2), NumberStyles.AllowDecimalPoint, culture.NumberFormat)
        arrInwoners(iTeller) = Integer.Parse(arrLijn(3), NumberStyles.Integer Or NumberStyles.AllowThousands, culture.NumberFormat)
        arrDeelgemeenten(iTeller) = Convert.ToString(arrLijn(4))
    Loop
End Sub

End Class
4

1 に答える 1

1

配列を作成していません。配列の参照を作成しただけです。配列を作成するには、サイズを指定する必要があります。次に例を示します。

Private arrGemeenten As String(100)

ただし、サイズを指定するには、配列を作成するときにサイズを知る必要があります。(まあ、実際にはすべてのデータを最初の項目に入れているので、サイズだけで1クラッシュを防ぐことができますが、それが意図したものであるとは思いません。) 代わりにリストを使用することをお勧めします。

Private gemeenten As New List(Of String)()

次に、Addメソッドを使用して項目をリストに追加します。

gemeenten.Add(Convert.ToString(arrLijn(0)))

また、疎結合データのリストを複数持つのではなく、データをカスタム オブジェクトの 1 つのリストに入れることを検討してください。

于 2012-09-29T22:49:25.360 に答える