Principales respuestas
Contar cantidad de palabra en listBox C#

Pregunta
-
Buenos días.
Necesito contar la cantidad de veces que aparece una palabra en un listBox y mostrarla en un label. Por ejemplo, la cantidad de veces que aparece hola:
0012321 hola
009123 adiós
012931 hola
Entiendo que el método FindString me podría ayudar con eso, pero no se como hacerlo.
Uso VisualStudio 2012. C#
y cargo los items al listBox con el siguiente código:
string[] listaPerdidos = File.ReadAllLines(@"C:\perdidos.txt"); lstPerdidos.Items.AddRange(listaPerdidos);
Muchas gracias de antemano.
Saludos
Respuestas
-
using System; using System.Windows.Forms; using System.IO; using System.Text.RegularExpressions; using System.Text;
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string perdidos = File.ReadAllText(@"C:\perdidos.txt", Encoding.Default); MatchCollection mc = Regex.Matches(perdidos, "hola", RegexOptions.IgnoreCase); StringReader sr = new StringReader(perdidos); while ((perdidos = sr.ReadLine()) != null) { lstPerdidos.Items.Add(perdidos); } label1.Text = mc.Count.ToString(); } } }
Aquí usamos el motor de expresiones regulares para contar las ocurrencias de la palabra dentro del texto antes de separarlos en líneas.
Luego usamos un StringReader para ir agregando las líneas de texto en el listbox.
Esto cuenta todas las apariciones "hola" en el texto. No se ha usado linq, porque no especificas la cantidad de veces que la palabra puede aparecer dentro de la línea. Por ejemplo, si quisieras conocer cuantos "0" hay, el resultado sería 3 en vez de 5, que es la cantidad real.
- Marcado como respuesta Robert Lluberes lunes, 22 de diciembre de 2014 17:02
- Editado Langosta lunes, 22 de diciembre de 2014 17:07
-
hola
pero porque tienes que leerlo desde un listbox? alli veo que usas un archivo ese trabajo deberias realizarlo sobre este no sobre el control
podrias ser tan simple como usar linq de esta forma
string[] listaPerdidos = File.ReadAllLines(@"C:\perdidos.txt"); int cantidad = listaPerdidos.Where(x=>x.Contains("hola")).Count();
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Willams Morales lunes, 22 de diciembre de 2014 16:48
- Marcado como respuesta Robert Lluberes lunes, 22 de diciembre de 2014 20:45
Todas las respuestas
-
using System; using System.Windows.Forms; using System.IO; using System.Text.RegularExpressions; using System.Text;
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string perdidos = File.ReadAllText(@"C:\perdidos.txt", Encoding.Default); MatchCollection mc = Regex.Matches(perdidos, "hola", RegexOptions.IgnoreCase); StringReader sr = new StringReader(perdidos); while ((perdidos = sr.ReadLine()) != null) { lstPerdidos.Items.Add(perdidos); } label1.Text = mc.Count.ToString(); } } }
Aquí usamos el motor de expresiones regulares para contar las ocurrencias de la palabra dentro del texto antes de separarlos en líneas.
Luego usamos un StringReader para ir agregando las líneas de texto en el listbox.
Esto cuenta todas las apariciones "hola" en el texto. No se ha usado linq, porque no especificas la cantidad de veces que la palabra puede aparecer dentro de la línea. Por ejemplo, si quisieras conocer cuantos "0" hay, el resultado sería 3 en vez de 5, que es la cantidad real.
- Marcado como respuesta Robert Lluberes lunes, 22 de diciembre de 2014 17:02
- Editado Langosta lunes, 22 de diciembre de 2014 17:07
-
hola
pero porque tienes que leerlo desde un listbox? alli veo que usas un archivo ese trabajo deberias realizarlo sobre este no sobre el control
podrias ser tan simple como usar linq de esta forma
string[] listaPerdidos = File.ReadAllLines(@"C:\perdidos.txt"); int cantidad = listaPerdidos.Where(x=>x.Contains("hola")).Count();
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Willams Morales lunes, 22 de diciembre de 2014 16:48
- Marcado como respuesta Robert Lluberes lunes, 22 de diciembre de 2014 20:45
-
using System; using System.Windows.Forms; using System.IO; using System.Text.RegularExpressions; using System.Text;
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string perdidos = File.ReadAllText(@"C:\perdidos.txt", Encoding.Default); MatchCollection mc = Regex.Matches(perdidos, "hola", RegexOptions.IgnoreCase); StringReader sr = new StringReader(perdidos); while ((perdidos = sr.ReadLine()) != null) { lstPerdidos.Items.Add(perdidos); } label1.Text = mc.Count.ToString(); } } }
Aquí usamos el motor de expresiones regulares para contar las ocurrencias de la palabra dentro del texto antes de separarlos en líneas.
Luego usamos un StringReader para ir agregando las líneas de texto en el listbox.
Esto cuenta todas las apariciones "hola" en el texto. No se ha usado linq, porque no especificas la cantidad de veces que la palabra puede aparecer dentro de la línea.
Muchas gracias.
Me funciono tu respuesta.
Voy a investigar más sobre las expresiones regulares.
De igual forma, gracias a los demás por su pronta respuesta. Son una gran comunidad.
Saludos,
-
Robert, el camino mas simple es el aporte de Leandro, lo has considerado?
Si los datos los tienes en "memoria", entonces deberías de operar sobre ellos con una consulta simple según comenta Leandro.
- Editado Willams Morales lunes, 22 de diciembre de 2014 19:13
-