none
Contar cantidad de palabra en listBox C# RRS feed

  • 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



    lunes, 22 de diciembre de 2014 16:11

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
    lunes, 22 de diciembre de 2014 16:32
  • 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
    lunes, 22 de diciembre de 2014 16:35

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
    lunes, 22 de diciembre de 2014 16:32
  • 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
    lunes, 22 de diciembre de 2014 16:35
  • 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,

    lunes, 22 de diciembre de 2014 17:06
  • 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.



    lunes, 22 de diciembre de 2014 19:06
  • Tienes razón Williams, marcare como respuesta.

    Muchas gracias.

    lunes, 22 de diciembre de 2014 20:30