2016-11-21 217 views
1

我想讀取vb 6.0程序中.txt文件中的特定行。我最感興趣的是特定文本出現的地方。我正嘗試應用我從另一個項目獲得的代碼。如何讀取txt文件中的特定行vb 6

Dim strLine As String 
Open "E:\Projects\VB\Ubunifu\MyList.txt" For Input As #1 
Line Input #1, strLine ' read one line at a time vs entire file 
lblCurrent.Caption = strLine 
Line Input #1, strLine 
lblO.Caption = strLine 
Close #1 

然而,這似乎並不奏效它說:「輸入過去文件的結束」

+0

您的代碼顯示2行。如果文件少於兩行,那麼你當然會「超過文件末尾」。如果你的文件沒有被編碼爲帶有CR或CRLF的ANSI作爲可能會導致問題的行分隔符。在這種情況下,你必須做更復雜的事情。 「 – Bob77

回答

-1

你可以試試這個:

Private Sub Form_Load() 
     Text1.MultiLine = True 
     Open "E:\Projects\VB\Ubunifu\MyList.txt" For Input As #1 
     Text1.Text = Input$(LOF(1), #1) 

     lblCurrent.Caption = udf_ReadLine(Text1.Text, 1) ' read line #1 
     lblCurrent_i.Caption = udf_ReadLine(Text1.Text, 2) ' read line #2 

     Close #1 
    End Sub 

    Private Function udf_ReadLine(ByVal sDataText As String, ByVal nLineNum As Long) As String 
     Dim sText As String, nI As Long, nJ As Long, sTemp As String 

     On Error GoTo ErrHandler 

     sText = "" 
     nI = 1 
     nJ = 1 
     sTemp = "" 
     While (nI <= Len(sDataText)) 
      Select Case Mid(sDataText, nI, 1) 
       Case vbCr 
        If (nJ = nLineNum) Then 
         sText = sTemp 
        End If 
       Case vbLf 
        nJ = nJ + 1 
        sTemp = "" 
       Case Else 
        sTemp = sTemp & Mid(sDataText, nI, 1) 
      End Select 
      nI = nI + 1 
     Wend 
     If (nJ = nLineNum) Then 
      sText = sTemp 
     End If 
     udf_ReadLine = sText 

     Exit Function 

    ErrHandler: 
     udf_ReadLine = "" 
    End Function 

我只是增加了一個功能,從字符串中讀取一行,並且您可以繼續使用LOF功能,也可以使用原始代碼中的所有概念。

0

首先,如果你搜索了你的錯誤,你會發現原因,https://msdn.microsoft.com/en-us/library/aa232640(v=vs.60).aspx

其次,您需要做一些事情來確保文件中有任何內容可以讀取。 https://msdn.microsoft.com/en-us/library/aa262732(v=vs.60).aspx

最後,使用循環來讀取文件中的行。看起來你希望第一行顯示在一個標籤中,第二行顯示在另一個標籤中。下面的代碼從文件中一次讀取一行,確定它是讀取奇數行號(第一行)還是偶數行號(第二行),並在標籤中顯示該行。讀完每行後,它會查找「某個文本」,如果發現它會退出循環並關閉該文件。

Open "E:\Projects\VB\Ubunifu\MyList.txt" For Input As #1 
Do While EOF(1) = False 
    Line Input #1, strLine ' read one line at a time vs entire file 
    lngLineNum = lngLineNum + 1 'Am I reading an odd or even line number 
    If lngLineNum Mod 2 <> 0 Then 
     lblCurrent.Caption = strLine 
    Else 
     lblO.Caption = strLine 
    End If 
    If InStr(1, strLine, "a cetain text", vbTextCompare) > 0 Then 
     Exit Do 
    End If 
Loop 
Close #1 

請注意,在調用InStr之前,我沒有檢查strLine是否包含任何內容。如果它是空的,InStr函數將導致錯誤。你應該添加一些防禦性編碼。至少是一個錯誤處理程序。

+0

」首先,如果你搜索了你的錯誤,你會找到原因。「顯然,如果確實發現,OP沒有發現或理解「原因」。可能不是一個好的形式來開始與譴責的答案。 – Jazimov