2014-02-08 71 views
0

VB應該讀取每一行並只顯示相應的「ItemNo」,但它所做的只是讀取我的代碼的最後一行並顯示它,它也不會返回我的消息,如果我把在尚不存在的料號中。什麼是糾正這種情況的方法,以便它只選擇具有相應「ItemNo」的行,並在找不到該編號時讓它返回我的消息。Visual Basic讀取文本文件

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles CheckNum.Click 
    Dim File As String = "K:\Access to Computing Folder\Monday\Nicholas Kakou\Assignments\Assignment 2\MicroNut Software Ltd\MicroNut Software Ltd\Data Files\StockFile.dat" 

    Dim TextLine As String = "" 

    If System.IO.File.Exists(File) = True Then 

     Dim objReader As New System.IO.StreamReader(File) 

     Do While objReader.Peek() <> -1 

      TextLine = objReader.ReadLine() & vbNewLine 

     Loop 
     MsgBox(TextLine) 
    Else 
     MsgBox("File Does Not Exist", MsgBoxStyle.OkOnly) 

    End If 
End Sub 
+0

好吧,我們不會做你的功課。但是我們可以說的是通過你的代碼來看看發生了什麼。我可以首先告訴你,每行讀取時都會覆蓋TextLine變量,因此讀取的最後一行是您將在消息框中獲得的內容。 (使用MessageBox.Show而不是MsgBox) –

+0

我並沒有要求你做我的「家庭作業」,我問我在哪裏出錯。在我的文章中沒有任何地方說這是爲我做的。 –

+0

當然,但它是這樣提出的。不過,我確實給你一個很好的啓發,就是爲什麼你只顯示最後一行......我們想確保你爲你的利益學習......就這些。 :) –

回答

2

這不是很清楚,但假設你正在尋找您的文本文件中的特定字符串,那麼你可以寫這個

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles CheckNum.Click 
    Dim FileName As String = ".........." 
    If System.IO.File.Exists(FileName) = True Then 
     Dim result = File.ReadLines(FileName) 
     Dim line = result.Where(Function (x) x.Contains("ItemNo")).FirstOrDefault() 
     If line Is Nothing Then 
      MsgBox.Show("Not Found") 
     Else 
      MsgBox.Show(line) 
     End If 
    Else 
     MsgBox.Show("File Not Found") 
    End If 
End Sub 

我用一個固定字符串「產品編號」,你應將其更改爲包含搜索文本的變量

注意File.ReadLines的使用,此方法不會讀取內存中的整個文件,並允許使用lambda表達式開始搜索結果集合

+0

我試了代碼,我修改了變量,但隨後它向我拋出這個錯誤「在System.Core.dll中發生類型'System.ArgumentNullException'的未處理的異常」。我明白這意味着它找不到變量,但我已經按照我在.dat文件中那樣輸入了它。如果System.IO.File.Exists(FileName)= True Then Dim result = ReadLines(FileName) Dim line = result.Where(Function(x)x.Contains(「ItemNo:」))。FirstOrDefault() 如果行沒有那麼 MessageBox.Show( 「未找到」) 否則 MessageBox.Show(線) 結束如果 否則 MessageBox.Show( 「找不到文件」)' –

+0

File.ReadLines() – Steve

+0

如果我那麼它會說File因爲它是保護級別而不可訪問(沒有被定義是我從表達中理解的) –