VB.net 读取文本文件并使用特定的提取单词填充组合框



我有一个让我头疼的问题。我真的以为有人会问这个问题,但几天的阅读和测试都没有结果。

我有一个文本文件,它开始:

"Determining profile based on KDBG search...
     Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)"

(两者之间的空行不是错误,"建议"之前的空格也不是错误)

我需要阅读以"建议..."开头的行仅提取以"Win"开头的每个唯一单词,并用它们填充组合框。(即"WinXPSP2x86"和"WinXPSP3x86")

我知道我需要使用"StreamReader"类,并且可能会有一个正则表达式,但是,作为一个初学者,将它们连接在一起目前超出了我的知识范围。

谁能帮忙?将不胜感激。

Imports System.IO
Public Class Form1
Private Sub Form1_Load( sender As Object,  e As EventArgs) Handles MyBase.Load
    ' BASIC is case sensitive and e is parameter so we will start
    ' new variables with the letter f.
    ' Read all lines of file into string array F.
    Dim F As String() = File.ReadAllLines("H:Projects35021241Input.txt")
    ' F() is a 0 based array.  Assign 3 line of file to G.
    Dim G As String = F(2)
    ' On line 3 of file find starting position of the word 'win' and assign to H.
    ' TODO:  If it is not found H will be -1 and we should quit.
    Dim H As Integer = G.IndexOf("Win")
    ' Assign everything beginning at 'win' on line 3 to variable I.
    Dim I As String = G.Substring(H)
    ' The value placed in delimiter will separate remaining values in I.
    ' Place C after ending quote to represent a single character as opposed to a string.
    Dim Delimiter As Char = ","C
    ' J array will contain values left in line 3.
    Dim J As String() = I.Split(Delimiter)
    ' Loop through J array removing anything in parenthesis.
    For L = J.GetLowerBound(0) to J.GetUpperBound(0)
        ' Get location of open parenthesis.
        Dim ParenBegin As Integer = J(L).IndexOf("(")
        ' If no open parenthesis found continue.
        If ParenBegin <> -1 then
            ' Open parenthesis found.  Find closing parenthesis location
            ' starting relative to first parenthesis.
            Dim Temp As String = J(L).Substring(ParenBegin+1)
            ' Get location of ending parenthesis.
            Dim ParenEnd As Integer = Temp.IndexOf(")")
            ' TODO:  Likely an exception will be thrown if no ending parenthesis.
            J(L) = J(L).Substring(0,ParenBegin) & J(L).Substring(ParenBegin + ParenEnd +2)
            ' Change to include text up to open parenthesis and after closing parenthesis.
        End If
    Next L
    ' UnwantedChars contains a list of characters that will be removed.
    Dim UnwantedChars As String = ",()"""
    ' Check each value in J() for presence of each unwanted character.
    For K As Integer = 0 to (UnwantedChars.Length-1)
        For L = J.GetLowerBound(0) To J.GetUpperBound(0)
            ' Declare M here so scope will be valid at loop statement.
            Dim M As Integer = 0
            Do
                ' Assign M the location of the unwanted character or -1 if not found.
                M= J(L).IndexOf(UnwantedChars.Substring(K,1))
                ' Was this unwanted character found in this value?
                If M<>-1 Then
                    ' Yes - where was it found in the value?
                    Select Case M
                        Case 0  ' Beginning of value
                            J(L) = J(L).Substring(1)
                        Case J(L).Length    ' End of value.
                            J(L) = J(L).Substring(0,(M-1))
                        Case Else   ' Somewhere in-between.
                            J(L) = J(L).Substring(0,M) & J(L).Substring(M+1)
                    End Select
                Else
                    ' No the unwanted character was not found in this value.
                End If
            Loop Until M=-1 ' Go see if there are more of this unwanted character in the value.
        Next L  ' Next value.
    Next K  ' Next unwanted character.
    ' Loop through all the values and trip spaces from beginning and end of each.
    For L As Integer = J.GetLowerBound(0) To J.GetUpperBound(0)
        J(L) = J(L).Trim
    Next L  
    ' Assign the J array to the combobox.
    ComboBox1.DataSource = J
End Sub
End Class

正如一些人已经建议的那样:

  • 使用System.IO.File.ReadAllLines,如果文件不是太大
  • 遍历行数组
  • 对于每一行,使用 Split 方法在空格上拆分
  • 检查每个单词的前三个字符

这有效,但当然需要一些错误检查等:

       Dim lines() As String = System.IO.File.ReadAllLines("c:\temp\example.txt")        将行单词() 暗淡为字符串        对于每一行作为字符串在行中            行字 = 行。Split(New Char() {" "}, System.StringSplitOptions.RemoveEmptyEntries)            对于每个单词作为字符串在行单词                如果字。长度> 3 然后                    如果字。子字符串(0, 3).ToUpper = "WIN" 那么                        cmbWords.Items.Add(word)                    结束如果                结束如果                           下一个        下一个

最新更新