Pues eso… que estoy preparando el artículo para usar dos RichTextBox de WPF sincronizados y esta es una de las cosas que allí (cuando lo publique) te explicaré. Hay muchas cosas que te tengo que explicar, así que… hoy empiezo por la más simple o que menos texto necesita
Esto es sencillo, pero… lo necesité para mostrar el número de palabras del documento activo (en el ejemplo de los RichTextBox sincronizados voy a usar 2 RichTextBox y un TextBox, los tres sincronizados -si así lo decides- ) y no lo investigué… preferí buscar una solución que alguien haya publicado ya… es que esto de las expresiones regulares, más que regulares son malas jajajajaja.
En serio, encontré un sitio web, en realidad un foro de Microsoft en el que alguien respondía con el código que te voy a mostrar, eso sí, el código original está en C# y para la aplicación base (ya sabes que empiezo escribiendo los ejemplos o mis aplicaciones con Visual Basic para .NET).
Una vez que se ve el código, uno dice… ¡pos qué fácil era! pero como todas estas cosas, hay que hacerlo primero
Este es el código de una función que recibe una cadena de texto y devuelve el número de palabras que hay.
La versión de Visual Basic .NET
''' <summary>
''' Contar las palabras de una cadena de texto
'''
''' Adaptado usando una cadena en vez del Text del RichTextBox
''' (sería del RichTextBox para WinForms)
''' El código lo he adaptado de:
''' https://social.msdn.microsoft.com/Forums/en-US/
''' 81e438ed-9d35-47d7-a800-1fabab0f3d52/
''' c-how-to-add-a-word-counter-to-a-richtextbox
''' ?forum=csharplanguage
''' </summary>
Private Function TextWordCount(texto As String) As Integer
Dim wordColl As MatchCollection = Regex.Matches(texto, "[\W]+")
Return wordColl.Count
End Function
La versión de C#:
/// <summary>
/// Contar las palabras de una cadena de texto
///
/// Adaptado usando una cadena en vez del Text del RichTextBox
/// (sería del RichTextBox para WinForms)
/// El código lo he adaptado de:
/// https://social.msdn.microsoft.com/Forums/en-US/
/// 81e438ed-9d35-47d7-a800-1fabab0f3d52/
/// c-how-to-add-a-word-counter-to-a-richtextbox
/// ?forum=csharplanguage
/// </summary>
private int TextWordCount(string texto)
{
MatchCollection wordColl = Regex.Matches(texto, @"[\W]+");
return wordColl.Count;
}
Aquí tienes un ejemplo de uso en una aplicación de consola de .NET Core para Visual Basic y la salida del código.
Imports System
Imports System.Text.RegularExpressions
Module Program
Sub Main(args As String())
Dim s = "Hello World de las aplicaciones de consola en .net core!"
Console.WriteLine(s)
Dim w = TextWordCount(s)
Console.WriteLine($"la cadena anterior tiene {w} palabras")
Console.ReadKey()
End Sub
''' <summary>
''' Contar las palabras de una cadena de texto
'''
''' Adaptado usando una cadena en vez del Text del RichTextBox
''' (sería del RichTextBox para WinForms)
''' El código lo he adaptado de:
''' https://social.msdn.microsoft.com/Forums/en-US/
''' 81e438ed-9d35-47d7-a800-1fabab0f3d52/
''' c-how-to-add-a-word-counter-to-a-richtextbox
''' ?forum=csharplanguage
''' </summary>
Private Function TextWordCount(texto As String) As Integer
Dim wordColl As MatchCollection = Regex.Matches(texto, "[\W]+")
Return wordColl.Count
End Function
End Module
Y esta es la salida por la consola de ese código.
Y esto es todo.
¡Mañana más!
Nos vemos.
Guillermo
P.S.
Ese código funciona también en .NET Core, la captura es de una aplicación de consola de .NET Core