如何在文本中搜索多个文本文件,然后将该文本添加到列表框

时间:2016-11-25 05:27:26

标签: vb.net

我在文件夹中有多个文本文件,如下所示:

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

文件名是按创建它们的时间和日期生成的,所以请不要尝试使用[1-4] .txt或类似的东西打开/搜索文档,因为这些只是示例。

我想搜索所有这些文本文件(不知道它们的名称是否随机生成),如果它与某些文本匹配,我希望添加该行的其余文本进入ListBox,然后搜索文本文件的下一个/其余部分。

文本文件内容示例:

[14:49:16] [客户线程/信息]:设置用户:Users Name

位于同一行的Setting user:之后的所有文本都应添加到ListBox中,因此在这种情况下,将添加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

2 个答案:

答案 0 :(得分:0)

您可以使用system.io.directory类并使用getfiles方法从directoy获取文件名。然后你可以打开文件并做必要的事情。

https://msdn.microsoft.com/en-us/library/system.io.directory.getfiles(v=vs.110).aspx

答案 1 :(得分: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