Jump to content

susodicho

Warianos
  • Posts

    128
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by susodicho

  1. Primero, cuando guardas cada línea en el archivo, estás agregando espacios entre cada cadena (además del separador ";"), o sea, cuando después vuelves a separar las cadenas usando Split, lo que obtienes no son las cadenas originales, ya que contienen espacios que antes no había. Por ejemplo: a = "Esto" b = "no" c = "funciona" sw.WriteLine(a & " ; " & b & " ; " & c) al volver a descomponer la línea en cadenas Dim arreglo() As String = linea.Split(";") lo que obtienes es: arreglo(0) = "Esto " arreglo(1) = " no " arreglo(2) = " funciona" si te fijas las cadenas que componen el arreglo no son las originales (nótese los espacios al inicio y al final). Por lo tanto, si es que ahora recorres el arreglo buscando, por ejemplo, la cadena "Esto" no la vas a encontrar. Así que tienes 2 opciones: Sólo agregar el separador ";", sin los espacios extras. Después de separar las cadenas con Split, le aplicas el método Trim a cada una (con esto eliminas los espacios extras al inicio y al final). Lo segundo, creo que deberías usar esta sobrecarga del método WriteLine, es decir, en vez de hacerlo así: sw.WriteLine(txtMarca.Text & ";" & precio.Value & ";" & cbTipo.SelectedItem) hazlo así: sw.WriteLine("{0};{1};{2}", txtMarca.Text, precio.Value, cbTipo.SelectedItem) Tercero, después de llamar a Split deberías verificar que el arreglo tenga la cantidad de elementos que tú esperas. Otra cosa, cuando agregas una fila al ListView no es necesario volver a crear el arreglo de cadenas a partir de un arreglo de cadenas (es redundante), sólo tienes que intercambiar los elementos 1 y 2, y después agregas el arreglo tal cual, sin usar New String() {...}. Por último, para buscar una palabra ingresada por el usuario puedes usar String.Compare ó Contains, dependiendo si vas a buscar en las cadenas individuales generadas al llamar a Split, o si vas a buscar en la línea completa (la que contiene los separadores). En el caso de usar String.Compare, el tercer parámetro debería ser StringComparison.InvariantCulture ó StringComparison.InvariantCultureIgnoreCase.
  2. :mmm: En realidad con un ListView no estoy seguro de cómo se hará, pero debe ser algo parecido a cómo se hace con un ListBox. En un ListBox basta con seleccionar el último elemento después que agregas elementos a la lista. O sea: listBox1.Items.Add("otra línea"); listBox1.SelectedIndex = listBox1.Items.Count - 1; por si acaso, siempre es más eficiente agregar varios elementos usando AddRange que agregar un elemento a la vez con Add.
  3. :mmm: Sin siquiera compilar se ve algo malo: el puntero l no está asignado, así que difícilmente te va a funcionar... :tonto: Además, de la forma en que lo tienes hecho ahora, siempre devuelve NULL (sin importar si encontró o no el dato), más encima la función no debería devolver nada porque la declaraste como "void buscar()". De todas formas, supongo que lo que quisiste hacer es: void buscar(lista *l) { //etc. } o sea, en vez de declarar el puntero "l" como variable local, lo dejas como parámetro de la función. Por último: el lenguaje es C (no C++)
  4. :mmm: Tendrías que ordenar el arreglo (da lo mismo si es en orden ascendente o descendente), así todas las palabras repetidas te quedan juntas. Una vez ordenado, tomas la primera cadena y la comparas (con ciclo repetitivo) con las siguientes y vas avanzando hasta que encuentres una distinta (con esto cuentas cuántas palabras iguales había), el índice te queda en la palabra que era distinta, ahora repite el proceso hasta completar de recorrer el arreglo. Para ordenar el arreglo usas el método estático Array.Sort. En tu caso, creo que no tienes que implementar la interfaz IComparer, como en el ejemplo, sino que tendrías que llamarla así: Array.Sort(arreglo, StringComparer.InvariantCultureIgnoreCase) ó así: Array.Sort(arreglo, StringComparer.InvariantCulture) dependiendo si tú consideras que "algo" es lo mismo que "ALGO" o no . De todas formas, échale una mirada a StringComparer.
×
×
  • Create New...