如何读取txt文件中的特定行vb 6

问题描述:

我想读取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

你可以试试这个:

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功能,也可以使用原始代码中的所有概念。

首先,如果你搜索了你的错误,你会发现原因,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