/ / Cuenta la ocurrencia de palabras específicas en un archivo de texto en vb.net - vb.net, word-count

Contar la aparición de palabras específicas en un archivo de texto en vb.net - vb.net, word-count

Estoy tratando de contar el número de un elemento en un archivo de texto, contando cada instancia que el elemento se ingresó en el archivo anteriormente en el programa.

Ya tengo el texto leído del archivo y enun cuadro de texto El problema es que mi código actual solo contaba los caracteres en el cuadro de texto y no la cantidad de veces que mi palabra deseada estaba en el archivo.

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

Esto cuenta los caracteres en el cuadro de textode contar el número de palabras deseadas. Lo intenté repetidamente antes de pedir ayuda y busqué mucho, pero simplemente no entiendo qué hay de malo en mi código. Por favor ayuda :)

Respuestas

0 para la respuesta № 1

Puedes usar División Función:

DO#:

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

VB.net:

Dim count As Integer = txtContentofFile.Text.Split(desiredword).Length - 1

0 para la respuesta № 2

Prueba esto:

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)

Función utilizada:

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

No solo tendrá el número de ocurrencias, sino también las posiciones de índice en el archivo, agrupadas fácilmente en un Dictionary.


0 para la respuesta № 3

Prefiero usar expresiones regulares en este tipo de situación. Son muy difíciles de entender, pero son extremadamente potentes y generalmente más rápidos que otras técnicas de manipulación de cadenas.

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

En su caso, está buscando el valor de AllMatchResults.Count.

Usando una gran herramienta de expresión regular como RegexBuddy construir y probar las expresiones también es de gran ayuda. (¡El fragmento de código anterior fue generado por RegexBuddy!)


-1 para la respuesta № 4

Prueba el siguiente código

Function word_frequency(word_ As String, input As String) As Integer
Dim ct = 0
Try
Dim wLEN = word_.Length
Do While input.IndexOf(word_) <> -1
Dim idx = input.IndexOf(word_) + wLEN
ct += 1
input = input.Substring(idx)
Loop
Catch ex As Exception

End Try
Return ct
End Function