• Sábado 24 de Octubre de 2020, 14:30

Autor Tema:  hacer una busqueda de una palabra en un archivo txt externo  (Leído 12010 veces)

computadora

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
hacer una busqueda de una palabra en un archivo txt externo
« en: Domingo 11 de Abril de 2010, 21:24 »
0
hola, lo que quiero saber es como en un windows application de c# puedo hacer que el usuario pueda seleccionar un archivo e introducir una palabra para buscarlo en el
esto es lo que tengo, pero no hace nada, solo revisa el ultimo renglon del archivo txt seleccionado ¿que le puedo modificar?
*tengo 2 botones, para borrar y buscar el doc y un listbox para poner los resultados
*****
int r = 0;
            bool esta = false;
            OpenFileDialog OpenFile = new OpenFileDialog();
            OpenFile.ShowDialog();
            try
            {
                FileStream son = new FileStream(OpenFile.FileName, FileMode.Open, FileAccess.Read);
                StreamReader so = new StreamReader(son);
                for (int i = 0; i <= 16; i++)  //NO. DE RENGLONES
                {

                    if (textBox1.Text.ToString() == "<CP>")    
                    {
                        pag++; ;
                    }
                    if (textBox1.Text.ToString() == "<CC>")
                    {
                        cap++; ;
                    }

                    if (textBox1.Text.ToString() == (so.ReadLine()).ToString())
                    {
                        r = i + 1;
                        esta = true;
                    }
                }
                so.Close();
            }
            catch (ArgumentException)
            {
            }
       
            if (esta == true)
            {
                listBox1.Items.Add("Se encuentra en la pagina " + pag + ", capitulo " + cap);
            }
            else {
                listBox1.Items.Add("La palabra no fue encontrada");
            }
           
         
         
        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
        }

            }

       
    }


*****

gracias ! :)

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: hacer una busqueda de una palabra en un archivo txt externo
« Respuesta #1 en: Domingo 11 de Abril de 2010, 23:16 »
0
te pego un ejemplo

Código: C#
  1.  
  2. FileStream fs = new FileStream(@"C:archivo.TXT",FileMode.Open);
  3. byte[] bytes = new byte[fs.Length];
  4. fs.Read(bytes, 0, bytes.Length);
  5. string s = Encoding.ASCII.GetString(bytes);
  6. bool b=s.Contains("palabra_a_buscar");
  7.  
  8.  

computadora

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: hacer una busqueda de una palabra en un archivo txt externo
« Respuesta #2 en: Lunes 12 de Abril de 2010, 18:44 »
0
gracias eltruhanero, tu codigo si me sirvio y le entendi  :lol:
unicamente a este no:
string s = Encoding.ASCII.GetString(bytes);
bool b=s.Contains("palabra_a_buscar");

otra cosa, y como podria poner un contador que sume uno cada vez que encuentre la palabra "agua" antes de la palabra buscada??
esto es lo que tengo
***********
  //buscar mientras que no encunetre la palabra
            do {
                if (s == "agua")
                {
                    contador++;
                }
            } while (acabar==false);
//este seria true cuando encuentre la palabra
           

 if (s.Contains(palabraBuscada) == true)
            {
                acabar = true;

                    }+

*******
gracias de antemano

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: hacer una busqueda de una palabra en un archivo txt externo
« Respuesta #3 en: Lunes 12 de Abril de 2010, 21:18 »
0
No precisas recorrer todo el archivo para saber si existes un string en el.

Te comento el codigo:

Código: C#
  1.  
  2. // Te "linkeas" con el archivo.
  3. FileStream fs = new FileStream(@"C:archivo.TXT",FileMode.Open);
  4.  
  5. // Copias todo el contenido del archivo a memoria
  6. byte[] bytes = new byte[fs.Length];
  7. fs.Read(bytes, 0, bytes.Length);
  8.  
  9. // Transformas los bytes del archivo a un string gigantesco
  10. string s = Encoding.ASCII.GetString(bytes);
  11.  
  12. // Al  string gigante levantado, le preguntas si tiene tal palabra
  13. bool b=s.Contains("palabra_a_buscar");
  14.  
  15.  

Si queres saber cuantas palabras tiene podes hacer:

Código: C#
  1.  
  2. FileStream fs = new FileStream(@"C:archivo.TXT",FileMode.Open);
  3. byte[] bytes = new byte[fs.Length];
  4. fs.Read(bytes, 0, bytes.Length);
  5. string s = Encoding.ASCII.GetString(bytes);
  6. const string buscar = "palabra_a_buscar";
  7. bool b=s.Contains(buscar);
  8.  
  9. // Inicializo
  10. int cant = 0;
  11. // mientras siga teniendo esa palabra
  12. while (b)
  13. {
  14.     cant++;
  15.     s = s.Remove(buscar,1);
  16.     b=s.Contains(buscar);
  17. }
  18.  
  19. // si b es true, la cantidad de veces q esta esa palabra es cant.
  20. // si b es false, cant es 0.
  21.  
  22.  
  23.  

Me entendes? No lo compile ni nada x lo q puede tener errores...pero conceptualmente esta bien...
La desventaja de este metodo es q si el archivo pesa 50 mb levantas 50mb a memoria...

Saludos, Daniel

computadora

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: hacer una busqueda de una palabra en un archivo txt externo
« Respuesta #4 en: Martes 13 de Abril de 2010, 04:06 »
0
muchisimas gracias por tus respuestas, de verdad :)

creo que me explique mal, dejame te pongo un ejemplo:
supongamos que el texto  a leer es:                agua perro casa auto agua domingo sabado algo palabra agua
y lo que quiero es que la palabra a buscar sea "sabado" y me cuente cuantas veces la palabra "agua" esta antes de ella, que serian 2

entonces seria modificar esto del ultimo codigo, pero al probarlo pues no me sale :(
  while (b)
   {
       cant++;
       s = s.Remove("agua",1);
       b=s.Contains(buscar);
   }


gracias de nuevo

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: hacer una busqueda de una palabra en un archivo txt externo
« Respuesta #5 en: Martes 13 de Abril de 2010, 17:35 »
0
Como tienes pensado realizarlo? Para mi es mas facil tirarte un codigo y listo pero no es la idea...

Esta bueno que esto sea interactivo y el foro ayude a pensar...y no sea un simple repositorio de codigo muerto..

Q pseudocodigo has pensado?

Saludos, Daniel.

computadora

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: hacer una busqueda de una palabra en un archivo txt externo
« Respuesta #6 en: Martes 13 de Abril de 2010, 19:34 »
0
lo que tengo planeado es esto:
en un windows application tener:
+ 1 boton (para darle clic y que busque )
+ un textbox (donde se pondra la palabra a buscar)
+ un listbox donde se escriba si la palabra fue encontrada o no y cuantas veces la palabra "agua" esta antes de ella

para esto he escrito esto:

        int contador=0;
        bool acabar = false;


        private void button1_Click(object sender, EventArgs e)
        {

            string palabraBuscada = textBox1.Text;

            FileStream fs = new FileStream(@"C:...documento", FileMode.Open);
           
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            string s = Encoding.ASCII.GetString(bytes);

           //buscar mietras que no encuentre palabraBuscada
            do {
                if (s == "agua")
                {
                    contador++;
                }
            } while (acabar==false); //este se modifica mas adelante, cuando la encuentra

                if(bool b = s.Contains(palabraBuscada);
               listBox1.Items.Add("si esta, agua esta "+contador +"veces");
               acabar = true;
else
              listBox1.Items.Add("no esta");

eltruhanero

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: hacer una busqueda de una palabra en un archivo txt externo
« Respuesta #7 en: Martes 13 de Abril de 2010, 20:40 »
0
Cita de: "computadora"

           //buscar mietras que no encuentre palabraBuscada
            do
            {
                if (s == "agua")
                {
                    contador++;
                }
             } while (acabar==false); //este se modifica mas adelante, cuando la encuentra

                if(bool b = s.Contains(palabraBuscada);
               listBox1.Items.Add("si esta, agua esta "+contador +"veces");
               acabar = true;
else
              listBox1.Items.Add("no esta");

Algunas cosas de esta parte:

Primero que lavariable 's' va a tener TODO el string del archivo, o sea si el documento.txt tenes "agua perro casa auto agua domingo sabado algo palabra agua", 's' va a tener todo eso, por lo que s == "agua" (o mejor puesto "s.Equals("agua")"  :P  ) SIEMPRE va a dar falso!!  :o

Ademas ...que es lo que hace este bucle? Suponiendo que contador es 0 y acabar es falso inicialmente por ejemplo...
Código: C#
  1.  
  2. do
  3. {
  4.      if (s == "agua")
  5.       {
  6.              contador++;
  7.       }
  8. } while (acabar==false);
  9.  
  10.  
Pasos:
 1.Evalua el if y da falso ( como vimos antes )
 2. Evalue acabar == false y da falso xq inicialemente acabar era falso
 3.Evalua el if y da falso ( como vimos antes )
 4. Evalue acabar == false y da falso xq inicialemente acabar era falso
 .... y asi infinitamente... no se si fue que simplemente le errastes en los {} o se te paso ese detalle

Se entiende?

Saludos, Daniel.