1

プログラムの早い段階でアイテムがファイルに入力された各インスタンスをカウントすることにより、テキストファイル内のアイテムの数を数えようとしています。

私はすでにファイルとテキストボックスからテキストを読み込んでいます。問題は、現在のコードがテキストボックス内の文字を数えるだけであり、目的の単語がファイル内にあった回数ではありません。

For Each desiredword As String In txtContentofFile.Text
        intdesiredword = intdesiredword + 1
        txtdesiredwordcount.Text = intdesiredword
Next

これは、目的の単語の数をカウントする代わりに、テキスト ボックス内の文字をカウントします。助けを求める前に何度も試して広範囲に検索しましたが、コードの何が問題なのかわかりません。助けてください :)

4

4 に答える 4

1

分割機能を使用できます:

C#:

int count = txtContentofFile.Text.Split(desiredword).Length - 1;

VB.net:

Dim count As Integer = txtContentofFile.Text.Split(desiredword).Length - 1
于 2013-03-20T13:05:31.530 に答える
0

この種の状況では、正規表現を使用することを好みます。理解するのは非常に難しいですが、非常に強力で、通常は他の文字列操作手法よりも高速です。

Dim AllMatchResults As MatchCollection
Try
    Dim RegexObj As New Regex(desiredword)
    AllMatchResults = RegexObj.Matches(txtContentofFile.Text)
    If AllMatchResults.Count > 0 Then
        ' Access individual matches using AllMatchResults.Item[]
    Else
        ' Match attempt failed
    End If
Catch ex As ArgumentException
    'Syntax error in the regular expression
End Try

あなたの場合、AllMatchResults.Count から値を探しています。

RegexBuddyのような優れた正規表現ツールを使用して式を作成およびテストすることも大きな助けになります。(上記のコード スニペットは RegexBuddy によって生成されました!)

于 2013-03-20T14:12:51.077 に答える
0

これを試して:

Dim text As String = IO.File.ReadAllText("C:\file.txt")
Dim wordsToSearch() As String = New String() {"Hello", "World", "foo"}
Dim words As New List(Of String)()
Dim findings As Dictionary(Of String, List(Of Integer))

'Dividing into words
words.AddRange(text.Split(New String() {" ", Environment.NewLine()}, StringSplitOptions.RemoveEmptyEntries))

findings = SearchWords(words, wordsToSearch)
Console.WriteLine("Number of 'foo': " & findings("foo").Count)

使用した機能:

Private Function SearchWords(ByVal allWords As List(Of String), ByVal wordsToSearch() As String) As Dictionary(Of String, List(Of Integer))
    Dim dResult As New Dictionary(Of String, List(Of Integer))()
    Dim i As Integer = 0

    For Each s As String In wordsToSearch
        dResult.Add(s, New List(Of Integer))

        While i >= 0 AndAlso i < allWords.Count
            i = allWords.IndexOf(s, i)
            If i >= 0 Then dResult(s).Add(i)
            i += 1
        End While
    Next

    Return dResult
End Function

出現回数だけでなく、ファイル内のインデックス位置も簡単にDictionary.

于 2013-03-20T13:08:08.180 に答える