Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: emma1990 en 21 Marzo 2011, 20:02 pm



Título: Buscar string en un archivo, y obtener datos
Publicado por: emma1990 en 21 Marzo 2011, 20:02 pm
Hola!

No me vendría mal un poco de ayuda con un programa que estoy haciendo ;D.

La historia consiste en que el programa abra un archivo de texto y busque una cadena, grabando lo que hay después de la cadena a otro archivo de texto.

Es decir, que si en el archivo input.txt hay esto: "blablabla nombre emma blablabla", obtenga un output.txt con el contenido "emma".

Soy bastante principiante en esto, pero sí sé abrir y cerrar archivos. Donde necesitaría ayuda es con lo demás

Alguna idea?

Gracias de antemano!  :laugh:


Título: Re: Buscar string en un archivo, y obtener datos
Publicado por: El_Java en 21 Marzo 2011, 22:44 pm
Mira en esta página de la wikipedia con info sobre el string.h :P
http://es.wikipedia.org/wiki/String.h
Si quieres más información busca en la pagina de cplusplus (buscalo asi en google), y coloca en el buscador de la pagina el nombre de la funcion que quieras (esta en ingles todo)


Título: Re: Buscar string en un archivo, y obtener datos
Publicado por: emma1990 en 21 Marzo 2011, 23:16 pm
Hola El_java, gracias por contestar!  :D
he visto esas funciones, pero el problema es que necesito orientarlo a lectura de archivos. En concreto, tengo que manejar archivos de varios cientos de kb..  :-\


Título: Re: Buscar string en un archivo, y obtener datos
Publicado por: Akai en 21 Marzo 2011, 23:34 pm
Si la velocidad es un factor crítico, te puedo sugerir que utilices mapeo en memoria.

Tienes mmap para linux:
http://linux.die.net/man/2/mmap

Y en windows el equivalente, si no me equivoco es CreateFileMapping:
http://msdn.microsoft.com/en-us/library/aa366537(v=VS.85).aspx

Únicamente puedo hablar del mmap de linux, que es el que he usado, y para ficheros grandes, se suele experimentar una ganancia en la lectura. Ya que en vez de ir leyendo el fichero a bloques lo transportas a memoria de una, y luego lo recorres como si se tratase de una CADENA. No es algo que aconseje a alguien que está empezando.

Recalco lo de tratarlo como una cadena, porque eso te permite acceder al elemento que quieras, cuando quieras, Por tanto, si tu buscas un patrón en un texto (suponiendo que buscas un único patrón), después de mapear el fichero, se me ocurre que puedas recorrerlo del tirón buscando la primera letra de tu patrón, que la encuentras, compruebas si después está la segunda, que no? sigues.

Respecto a la velocidad... el uso que yo le he llegado a dar es leer 92 archivos de entre 1.5 y 2 MB cada uno, y pasar su contenido a una matriz (leía como texto, y luego pasaba a número, y no lo podía mapear directamente como números por tratarse de un fichero de texto, no binario)
189 MB en 2 segundos con mi portátil (pentium T4300)