none
Mostrar elementos específicos en un ciclo For RRS feed

  • Pregunta

  • Buenas noches.

    Tengo un inconveniente con un una aplicación de windows forms escrita en c#, tengo que siguiente código con ciclos For que lo que hace es mostrarme las veces que se repite una palabra, en un archivo de texto.

       private void btnbusca_Click(object sender, EventArgs e)
            {
                vehiculo contar = new vehiculo();
                List<vehiculo> buscapl = contar.Obtener();
                string datos = "";
                for (int i = 0; i < buscapl.Count; i++)
                {
                    string placa = buscapl[i].placa;
                    int cantidad = 0;
                    for (int j = 0; j < buscapl.Count; j++)
                    {
                        if (placa.Equals(buscapl[j].placa))
                        {
                            cantidad++;
                        }
                        
                    }
                    datos += string.Format("{0}-esta regisrado{1} veces \n", placa, cantidad);
                }
                MessageBox.Show(datos);
            }

    Lo que hace el codigo es lo siguiente:

    Esto lo hace solo al presionar el botón buscar sin especificar en el textbox cual buscar, pero lo que necesito y no se como hacerlo es que en el mensaje muestre solo la placa que ingrese el textbox y el numero de veces que esta registrada.

    Agradezco su colaboracion


    • Editado Guaiaba miércoles, 24 de mayo de 2017 5:17 Agregar datos
    miércoles, 24 de mayo de 2017 5:13

Respuestas

  • Buenas. En primer lugar debes guardar la información obtenida del textBox mediante una variable. Si la cadena insertada esta escrita en minusculas, todo lo que se debe de hacer es convertirla a mayusculas utilizando .ToUpper()

    String placaBuscar = textBox1.Text.ToUpper();

    Lo siguiente que debes hacer es recorrer la lista con los numeros de placa. Asumiendo que tu lista es

    List<vehiculo> buscapl

    Entonces solo debes recorrerla y buscar cuantas veces se repite la placa escrita en el textBox

    int cantidad = 0;
    
    for (int j = 0; j < buscapl.Count; j++)
    {
        if (placaBuscar.Contains(buscapl[j].placa))
        {
             cantidad++;
        }                   
    }
    
    if(cantidad > 0)
    {
        MessageBox.Show("La placa " + placaBuscar + " aparece " + cantidad.toString() + " veces.");
    }
    else
    {
        MessageBox.Show("La placa " + placaBuscar + " no aparece en la lista. Favor de intentar una nueva busqueda.");
    }

    En este caso solo necesitas recorrer la lista con solo un ciclo for debido a que solo buscamos una sola cadena.

    Obvio esto lo hice en un MessageBox, pero es para que mas o menos te des una idea de como hacerlo.

    Ojo, no olvides hacer las validaciones necesarias sobre la cadena en el textBox (que la cadena no sea menor o mayor a 6 caracteres y que haya solo 3 letras y 3 numeros).

    • Marcado como respuesta Guaiaba miércoles, 24 de mayo de 2017 11:35
    miércoles, 24 de mayo de 2017 5:44

Todas las respuestas

  • Buenas. En primer lugar debes guardar la información obtenida del textBox mediante una variable. Si la cadena insertada esta escrita en minusculas, todo lo que se debe de hacer es convertirla a mayusculas utilizando .ToUpper()

    String placaBuscar = textBox1.Text.ToUpper();

    Lo siguiente que debes hacer es recorrer la lista con los numeros de placa. Asumiendo que tu lista es

    List<vehiculo> buscapl

    Entonces solo debes recorrerla y buscar cuantas veces se repite la placa escrita en el textBox

    int cantidad = 0;
    
    for (int j = 0; j < buscapl.Count; j++)
    {
        if (placaBuscar.Contains(buscapl[j].placa))
        {
             cantidad++;
        }                   
    }
    
    if(cantidad > 0)
    {
        MessageBox.Show("La placa " + placaBuscar + " aparece " + cantidad.toString() + " veces.");
    }
    else
    {
        MessageBox.Show("La placa " + placaBuscar + " no aparece en la lista. Favor de intentar una nueva busqueda.");
    }

    En este caso solo necesitas recorrer la lista con solo un ciclo for debido a que solo buscamos una sola cadena.

    Obvio esto lo hice en un MessageBox, pero es para que mas o menos te des una idea de como hacerlo.

    Ojo, no olvides hacer las validaciones necesarias sobre la cadena en el textBox (que la cadena no sea menor o mayor a 6 caracteres y que haya solo 3 letras y 3 numeros).

    • Marcado como respuesta Guaiaba miércoles, 24 de mayo de 2017 11:35
    miércoles, 24 de mayo de 2017 5:44
  • hola

    pero porque no usas linq, lo solucionarias con alguns lineas

    List<vehiculo> buscapl = contar.Obtener();
    
    var result = from item in buscapl
                       group item by item.placa into g
                      select new {
                          placa = g.Key,
                          cantidad = g.Count()
                      };
    
    string datos = "";
    
    foreach(var item in result){
    
         datos += string.Format("{0}-esta regisrado{1} veces \n", item.placa, item.cantidad);
    
    }

    y si quieres filtrar soloaplicarias un where en el linq

    var result = from item in buscapl
                   where item.placa == txtBusqueda.Text
                   group item by item.placa into g
                   select new {
                          placa = g.Key,
                          cantidad = g.Count()
                      };

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 24 de mayo de 2017 6:11
  • Gracias WalfasProject8000 Funciono perfecto. 

    Agradezco tu colaboración.

    Saludos

    miércoles, 24 de mayo de 2017 11:32
  • Gracias Leandro Tuttini También funciono de este modo pero como es para un proyecto de la universidad no puedo usar linq.

    Agradezco tu colaboración.

    Saludos.


    • Editado Guaiaba miércoles, 24 de mayo de 2017 11:35
    miércoles, 24 de mayo de 2017 11:33