none
陣列比對文件檔的問題~ RRS feed

  • 問題

  •  

    請問各位高手...我先將幾個中文字串存入陣列...然後再從陣列內的字串來比對RichTextBox的文字內容....

    如果RichTextBox內有出現陣列內的字串的話...那個字串統計會加1...程式碼目前的問題是他只會比對統計陣列內的第一個字串出現次數...其他都不會統計..以下是我的程式碼...希望有人幫我看看我問題出在哪裡?....拜託了~~~我用的VB2005. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim words() As String = {"信息戰", "病毒", "美軍", "美國"}
            Array.Sort(words)
            Dim i As Long
            Dim start As Integer = 0
            Dim r As String = words(i)       '讀取關鍵字
            Dim pos As Integer = RichTextBox1.Find(r, start, RichTextBoxFinds.None)
            Dim count As Integer = 0
            '計算出現次數
            For i = 0 To UBound(words)
                Do While pos > -1
                    count += 1
                    start = pos + 1
                    pos = RichTextBox1.Find(r, start, RichTextBoxFinds.None)
                Loop
            Next
            RichTextBox2.Text &= r & "   " & count
        End Sub

    2008年5月6日 下午 03:30

解答

  •  

    謝謝各位大大的幫助....

    大家的方法都還算成功...

    我現在把我的寫法PO出來給有需要的版友參考....

     

    Private Sub Button3_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button3.Click

    Dim words() As String = {"要搜尋的字串1""字串2""字串3""字串4"}  

     Array.Sort(words)
            Dim i As Integer
            Dim start As Integer = 0
            Dim r As String
            Dim pos As Integer
            Dim count As Integer = 0

            '計算出現次數
            For i = 0 To UBound(words)
                r = words(i)
                start = 0
                count = 0
                pos = RichTextBox1.Find(r, start, RichTextBoxFinds.None)

                Do While pos > -1
                    count += 1
                    start = pos + 1
                    pos = RichTextBox1.Find(r, start, RichTextBoxFinds.None)
                Loop     

                If count = 0 Then
                    RichTextBox2.Text &= ""
                Else
                    RichTextBox2.Text &= r & "    " & count & vbCrLf
                End If
            Next

        End Sub

    2008年5月9日 下午 05:20

所有回覆

  • 你的程式碼並沒有在迴圈內重置你相關變數,你用除錯模式去跑看看就知道了。

     

    注意你的 r 變數沒改變。

     

    一般直接用 Split 取代即可。

    把 Do 迴圈改成:

    Count += UBound(Split(RichTextBox1.Text, words(i))

     

    2008年5月6日 下午 04:01
    版主
  •  

    我把 Do 迴圈內的 "count += 1" 改成 "Count += UBound(Split(RichTextBox1.Text, words(i)))"...

    結果還是一樣...他只會統計words( )陣列內的第一個字串...

    也就是"信息戰"出現的次數而已...

    不知道要如何改.... '璉大' 能再指導一下嗎? 多謝了~~

    2008年5月6日 下午 06:17
  • Hi,

    璉大的意思是說把整個迴圈替換掉,不只是替換該行而已,例如

     

    Dim Word_Count(陣列上限) As Integer

    For i = 0 To UBound(words)
             Word_Count(i) = UBound(Split(RichTextBox1.Text, words(i)))

    Next

     

    2008年5月7日 上午 02:05
    版主
  •  

    請問bauann大大.... "Dim Word_Count(陣列上限) As Integer" 裡的(陣列上限)是什麼意思??

    "Word_Count(i)" 是我在自己新增一個陣列字串嗎???

    我的"words( )" 就是我存放要搜尋字串的陣列....

    我要顯示的搜尋結果是要例如像...

    信息戰   15

    病毒      13

    美軍      10

    美國        0

    這個樣子~~~~多謝指導....
    2008年5月7日 下午 02:07
  • 我又更改了一下程式碼...

    現在陣列內的四個字串都會統計次數了...

    不過只有第一個字串統計的字串是正確的....

    其它則會顯示第一筆字串統計量的倍數成長....例如

    信息戰     10   <-- 只有這個正確 

    美國        20

    病毒        30

    電腦        40

    程式碼如下:

      Dim words() As String = {"信息戰", "美國", "病毒", "電腦"}
            Dim i As Integer
            Dim start As Integer = 0
            Dim r As String
            Dim pos As Integer
            Dim count As Integer = 0

            '計算出現次數
            For i = 0 To UBound(words)

                r = words(i)
                start = 0
                pos = RichTextBox1.Find(r, start, RichTextBoxFinds.None)

                Do While pos > -1
                    count += 1
                    start = pos + 1
                    pos = RichTextBox1.Find(r, start, RichTextBoxFinds.None)
                Loop
                RichTextBox2.Text &= r & "   " & count & vbCrLf
            Next

     

    不知道問提又出在哪裡了...多謝~~~

    2008年5月7日 下午 02:53
  • 重新進入迴圈記得要把 count 設定為 0 恢復初值

    2008年5月7日 下午 03:33
  •  ayumi920 寫信:

     

    請問bauann大大.... "Dim Word_Count(陣列上限) As Integer" 裡的(陣列上限)是什麼意思??

    "Word_Count(i)" 是我在自己新增一個陣列字串嗎???

    我的"words( )" 就是我存放要搜尋字串的陣列....

    我要顯示的搜尋結果是要例如像...

    信息戰   15

    病毒      13

    美軍      10

    美國        0

    這個樣子~~~~多謝指導....

    Hi,

    我的意思大慨是像下面這樣

    Code Snippet

            Dim Words() As String = {"美國", "英國", "中國"}

            Dim Words_Count(Words.Length - 1) As Integer

            For i = 0 To UBound(Words)

                Words_Count(i) = Split(RichTextBox1.Text, Words(i)).Length

            Next

     

     

     

    2008年5月8日 上午 01:44
    版主
  • 以下範例是乾淨的寫法,但不一定有效率。

    private void button4_Click(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();
        string[] words = {"信息戰", "美國", "美軍", "中共"};
        foreach (string word in words)
        {
            sb.AppendFormat("{0}:{1} {2}", word, Regex.Matches(richTextBox1.Text, word).Count, Environment.NewLine);
        }
     
        richTextBox2.Text = sb.ToString();
    }

    2008年5月8日 上午 02:12
  •  

    謝謝各位大大的幫助....

    大家的方法都還算成功...

    我現在把我的寫法PO出來給有需要的版友參考....

     

    Private Sub Button3_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button3.Click

    Dim words() As String = {"要搜尋的字串1""字串2""字串3""字串4"}  

     Array.Sort(words)
            Dim i As Integer
            Dim start As Integer = 0
            Dim r As String
            Dim pos As Integer
            Dim count As Integer = 0

            '計算出現次數
            For i = 0 To UBound(words)
                r = words(i)
                start = 0
                count = 0
                pos = RichTextBox1.Find(r, start, RichTextBoxFinds.None)

                Do While pos > -1
                    count += 1
                    start = pos + 1
                    pos = RichTextBox1.Find(r, start, RichTextBoxFinds.None)
                Loop     

                If count = 0 Then
                    RichTextBox2.Text &= ""
                Else
                    RichTextBox2.Text &= r & "    " & count & vbCrLf
                End If
            Next

        End Sub

    2008年5月9日 下午 05:20