2017-11-19 11 views
0

OpenFileDialogを使用してテキストファイルを開き、LINQを使用して配列に分割して検索する電子メール連絡先の検索を行っています。 openFileDialogが動作していますが、LINQクエリを実行すると、object reference not set to an instance of an objectエラーが発生します。 Option Inferがオンになっていて、これが私の教科書のいくつかの例のように設定されていることがわかります。誰かが私を正しい方向に向けることができますか? (テキストファイルは、最初のボタン・コード上記のクラス変数として定義される: "Dim textFile(2) As String"LINQクエリのヌルエラー

コード:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles BtnOpen.Click 
    OpenFileDialog1.ShowDialog() 
    textFile(2) = OpenFileDialog1.FileName 
    lstOutput.DataSource = IO.File.ReadAllLines(textFile(2)) 
    lstOutput.SelectedItem = Nothing 
End Sub 

Private Sub btnNameSearch_Click(sender As Object, e As EventArgs) Handles btnNameSearch.Click 
    Dim queryName = From line In textFile 
        Let data = line.Split(","c) 
        Let firstName = data(0) 
        Let lastName = data(1) 
        Let email = data(2) 
        Where firstName = txtName.Text 
        Select firstName, lastName, email 
    lstName.DataSource = queryName.ToList 
End Sub 

編集:コードは、ライン21上の破断 "データレット= line.Split("、 "C 。)あなたはLINQはに対してクエリを実行していることを文字列としてファイル名を使用している

+0

一般的に 'If(OpenFileDialog.ShowDialog()== DialogResult.OK)'のようなものが必要です。それ以外の場合は[キャンセル]をクリックするとコードが実行されます。 –

+0

私の無知を許してください。しかし、エラーのスタックトレースはどういう意味ですか? – jt1990

+0

また、ファイルに余分な空白がないのは確かですか?分割しているコンマのように、前後にスペースがありませんか? 'firstName.Trim()== txtName.Text'なんかどこで行うことができますか? –

答えて

0

あなたは、ファイルの内容自体を使用する必要が

の変更をあなたのコードを何かにこのように:。

Private lines() As String 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles BtnOpen.Click 
    If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then 
     textFile(2) = OpenFileDialog1.FileName 
     lines = IO.File.ReadAllLines(textFile(2)) 
     lstOutput.DataSource = lines 
     lstOutput.SelectedItem = Nothing 
    End If 
End Sub 

Private Sub btnNameSearch_Click(sender As Object, e As EventArgs) Handles btnNameSearch.Click 
    Dim queryName = From line In lines 
        Let data = line.Split(","c) 
        Let firstName = data(0) 
        Let lastName = data(1) 
        Let email = data(2) 
        Where firstName = txtName.Text 
        Select firstName, lastName, email 
    lstName.DataSource = queryName.ToList 
End Sub 
+0

素晴らしい!どうもありがとうございます!私はこれと何時間も戦ってきた。 – jt1990

+0

それは私たちの最高に起こります。同じコードを長時間見続けると、簡単な間違いが簡単に見逃されることがあります。 –