2016-11-25 7 views
0

にそのテキストを追加し、テキストの複数のテキストファイルをどのように検索します:私はその後、私はこのように、フォルダ内の複数のテキストファイルを持っているリストボックス

C:\Example\1.txt2.txt3.txt4.txt

ファイル名は作成された日時によって生成されますので、[1-4] .txtなどを使用してドキュメントを開いたり、検索したりしないでください。

ランダムに生成された名前を知らないうちにこれらのテキストファイルをすべて検索したいと思います。特定のテキストと一致する場合は、その行の残りのテキストをa ListBox、次にテキストファイルの次の/残りを検索します。テキストファイルの内容の

例:

[午後2時49分16秒] [クライアントスレッド/ INFO]:ユーザ設定:Users Name

に追加する必要が同じライン上にあるSetting user:後のすべてのテキストリストボックスなので、この場合はUsers Nameが追加されます。

上記のテキストは常にテキストファイルの最初の行になるため、ファイル全体を検索する必要はなく、テキストの先頭は常に作成時刻(各テキストファイルごとに異なります)です。次に[Client thread/INFO]: Setting user:が続き、すべてのテキストファイルで常に同じになります。Users Nameは実際にはUsers Nameを出力しません。これは私が見つけたいもので、ListBoxに追加します。

コードの一部が作成されていますが、3つの問題があります。

1:私は知らないテキストファイルの名前を定義する必要があります。

2:私はすべてのドキュメントを検索する方法がわかりません。

3:は、私は、出力Users nameにそれを得ることができますが、唯一の私は削除する場合time[Client thread/INFO]:をリードするが、これらの項目は常に存在します。

この3つの問題は、コードが役に立たないため、誰かが私を助けやすくなる可能性があるため、コードを提供していますか?

Public Class Form1 
Private Sub LoadFiles() 
    For Each line As String In IO.File.ReadLines("C:\Example\2016-09-28-1.txt") 
'I had to define the name of the text file here, but I need to somehow automatically 
'search all .txt files in that folder. 

     Dim params() As String = Split(line, ": ") 

     Select Case params(0) 
      'Text file has to be modified to show as: 

      Setting user: RandomNameHere 

      'for the RandomName to show within the ListBox, 
      'but normally it will never be shown like this within the text files. 

      Case "Setting user" 
       ListBox1.Items.Add(params(1)) 
     End Select 
    Next 
End Sub 

答えて

0

.txtファイルをフィルタリングするファイルのリストを取得するにはSystem.IO.Directory.GetFilesを使用し、System.IO.Path.GetExtensionString.IndexOf関数を使用すると、ファイルの各行内のテキストを検索できます。String.Substringを使用すると、行の一部を取得できます。

Splitを使用して、元のコードは、(あなたがスプリットテキストを通過する別のループが必要になります)動作させることができますが、私はIndexOfSubstringが、この場合の単純だと思います。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim strFilenames() As String = System.IO.Directory.GetFiles("C:\Example") 
    For i As Integer = 0 To strFilenames.GetUpperBound(0) 
     Dim strFilename As String = strFilenames(i) 
     If System.IO.Path.GetExtension(strFilename).ToLower = ".txt" Then 
     For Each strLine As String In System.IO.File.ReadLines(strFilename) 
      '[14:49:16] [Client thread/INFO]: Setting user: Users Name 
      Dim strSearchText As String = "Setting user: " 
      Dim intPos As Integer = strLine.IndexOf(strSearchText) 
      If intPos > -1 Then 
      Dim strUsername As String = strLine.Substring(intPos + strSearchText.Length) 
      MsgBox(strFilename & " - " & strUsername) '<-- replace this with your SELECT CASE or whatever 
      End If 
     Next strLine 
     End If 
    Next i 
    End Sub 
+0

これはうまくいった、ありがとう! – Joey

+1

コードを投稿するだけで、OPの質問がどのように修正されたか説明できません。上記のOPコードに何が間違っていたのか、あなたの答えは明らかにそのことを説明していません... – Codexer

+0

OK説明文を追加しました – SSS

関連する問題