Jump to content

buscar algun texto dentro de un archivo .txt// ayudaa VB.NET


Recommended Posts

hola a todos! :D

 

explicare todo lo que estoy haciendo para que me entiendan mejor ESTA EN VB.NET

 

tengo un form1 que donde ingreso los productos marcas, etc y se guardan en c:Testcertamen.txt // dejo el codigo guardado

 

Dim sw As New StreamWriter("c:Testcertamen.txt", True)

sw.WriteLine(tx_NombreP.Text & " ; " & tx_marcaP.Text & " ; " & tx_CodigoP.Text & " ; " & NU_PrecioP.Value & " ; " & cb_tipop.SelectedItem)

sw.Close()

limpiarDatos()

MsgBox("El Producto se Guardo Correctamente ", MsgBoxStyle.Information)

y me deja el txt guadado de esta forma cada linea

 

m&m ; ambrosoli ; 4a5678 ; 2600 ; chocolates

 

luego en un form2 tengo un boton mostrar todos los productos guardados en certamen.txt dentro de un listview // dejo el codigo

 

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click

If File.Exists("c:Testcertamen.txt") Then

ListView1.Items.Clear()

Dim sr As New StreamReader("c:Testcertamen.txt")

Dim linea = sr.ReadLine

Do While Not linea Is Nothing

Dim arreglo() As String = linea.Split(";")

ListView1.Items.Add(New ListViewItem(New String() {arreglo(0), arreglo(2), arreglo(1), arreglo(3), arreglo(4)}))

linea = sr.ReadLine

Loop

sr.Close()

Else

MsgBox("Error,No existen Productos.debe registrar algun producto", MsgBoxStyle.Critical)

 

End If

 

 

hasta aqui todo bien,pero cuando quiero hacer una busqueda de una palabra que fue ingresada por un textbox y buscar dentro del archivo .txt no me a funcionado ningun codigo que e visto en las librerias de microsoft

 

 

 

EJ: si en el textbox pusiera m&m y apreto el boton buscar tendria que encontrar

m&m ; ambrosoli ; 4a5678 ; 2600 ; chocolates o solamente m&m

Edited by krlito__
Link to comment
Share on other sites

Ya utilizaste BufferedReader para leer primero y despues StringTokenizer para guardar en un arreglo cada token ejemplo [m&m] ; [ambrosoli] ; [4a5678] ; [2600] ; [chocolates] esos serian tus arreglos ahora para buscar tienes que ver si es por codigo por categoria, etc, luego comparas lo que te ingresaron con lo que tienes en cada token (en el token que quieres comparar), supongo que tienes que mostrar, como ya tienes los datos haces un if que lo que ingresaron que sea igual a lo que encontraste luego de eso llamas a un metodo que sea solo para mostrar

 

Espero te servia cualquier duda sera respondida

 

Saludos

Link to comment
Share on other sites

Ya utilizaste BufferedReader para leer primero y despues StringTokenizer para guardar en un arreglo cada token ejemplo [m&m] ; [ambrosoli] ; [4a5678] ; [2600] ; [chocolates] esos serian tus arreglos ahora para buscar tienes que ver si es por codigo por categoria, etc, luego comparas lo que te ingresaron con lo que tienes en cada token (en el token que quieres comparar), supongo que tienes que mostrar, como ya tienes los datos haces un if que lo que ingresaron que sea igual a lo que encontraste luego de eso llamas a un metodo que sea solo para mostrar

 

Espero te servia cualquier duda sera respondida

 

Saludos

 

gracias por responder! eso lo tengo claro en JAVA! :) pero esto es VB.NET :( xd saludos y gracias por la info! :P

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...