2016-11-25 38 views
0

我有一個文件夾內的多個文本文件,像這樣:我如何搜索文本多TEXTFILES,那麼該文本添加到列表框

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

的文件名是由它們在創建時的時間和日期生成的,所以請不要嘗試使用[1-4] .txt或類似的東西打開/搜索文檔,因爲這些僅僅是示例。

我想搜索所有這些文本文件(不知道它們的名稱是隨機生成的),如果它匹配某些文本,我想將該行上的其餘文本添加到一個ListBox,然後搜索下一個/其餘的文本文件。的文本文件內容

實施例:

[14時49分十六秒] [客戶端線程/ INFO]:設置用戶:Users Name

Setting user:之後的所有文本,其是在同一行上應加列表框,所以在這種情況下,Users Name將被添加。

上述文字將始終是文本文件的第一行,因此不需要搜索整個文件,文本的開頭始終是創建的時間(對於每個文本文件而言都不相同),然後[Client thread/INFO]: Setting user:這將始終是相同的所有文本文件,然後Users Name,這實際上不會輸出Users Name,這是我想找到的,然後添加到ListBox

我已經創建了一些代碼,但存在三個問題。

1:我必須定義文本文件的名稱,我不知道。

2:我不知道如何搜索所有文檔,只有定義的文檔。

3:我能得到它的輸出Users name,但只有當我刪除了領先time[Client thread/INFO]:,但這些項目將永遠存在。

有了這三個問題,代碼是沒用的,我只是提供它可能會讓它更容易幫助我?

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

使用System.IO.Directory.GetFiles得到的文件列表,並System.IO.Path.GetExtension來篩選.txt文件。 String.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

好的我已經添加了一些說明文字 – SSS

相關問題