2016-11-21 31 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 

しかしこのdoesntのは、それを作業しているようだが、「ファイルの終わり過去の入力」を言う

+0

コードは2行です。ファイルの行数が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)。

第2に、ファイルに何かが確実に読み込まれるようにする必要があります。 https://msdn.microsoft.com/en-us/library/aa262732(v=vs.60).aspx

最後に、ファイルから行を読み取るためにループを使用します。最初の行を1つのラベルに表示し、2番目の行を別のラベルに表示するように見えます。以下のコードは、ファイルから一度に1行を読み込み、奇数行(1行目)または行番号(2行目)を読み取っているかどうかを判断し、その行をラベルに表示します。各行が読み込まれると、その行が何であれ「特定のテキスト」が検索され、見つかった場合はループを終了してファイルを閉じます。

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が実際に見つかった場合、OPは「原因」を見つけたり理解したりしなかった。おそらく、叱責で答えを出すにはいい形ではないでしょう。 – Jazimov

関連する問題