Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cassiel83 en 3 Abril 2012, 17:10 pm



Título: Busqueda desde txt en C++
Publicado por: cassiel83 en 3 Abril 2012, 17:10 pm
Buenas tardes a todos tengo un problema con un programa que lee desde un listado txt los nombres de unos archivos, luego llama a una funcion que intenta abrirlos uno a uno para considerar si existen o no.
El problema es que si escribo directamente el nombre del archivo en el programa lo encuentra, pero si lo lee desde el listado, lo mete en un string y se lo pasa a la función no lo hace. Alguna idea de donde puede estar el fallo?.

Gracias de antemano

El listado tiene esta forma:
Código:
arc_2012041
arc_2012042
arc_2012043
arc_2012044

y el programa es este:
Código:
#include <stdio.h>

//funcion de existencia
void existe(char archivo[60]);

//programa principal
int main ()
{
char archivo1[30];
char ruta[60];

FILE *listado;

listado = fopen("lista.txt", "r");
if (listado==NULL)
{
printf("No se encuentra el listado\n");
return 1;
}

while (fgets(archivo1, 30, listado)!=NULL)
{
sprintf(ruta,"D:\\carpeta\\%s",archivo1);
existe(ruta);
}

fclose(listado);
return 0;
}

//funcion de existencia
void existe(char archivo[60])
{
FILE *faux;

faux = fopen(archivo, "r");
if (faux==NULL)
printf("archivo no encontrado\n");
else
{
printf("archivo encontrado\n");
fclose(faux);
}
}


Título: Re: Busqueda desde txt en C++
Publicado por: satu en 3 Abril 2012, 17:49 pm
Hola

Ahora estoy en clase y no puedo ver bien el código (en estas pantallas se ve fatal y no puedo probarlo), pero no veo nada raro, lo único que se me ocurre es que escribas las extensiones de los archivos en el listado. Si sigues con problemas intentaré verlo luego en casa o que alguien más entre y lo vea.

Saludos


Título: Re: Busqueda desde txt en C++
Publicado por: cassiel83 en 3 Abril 2012, 17:58 pm
Hola, gracias. En mi listado completo si que aparecen las extensiones de los archivos, y aun asi falla


Título: Re: Busqueda desde txt en C++
Publicado por: durasno en 3 Abril 2012, 18:02 pm
Hola! si tu listado tiene esta forma:
arc_2012041
arc_2012042
arc_2012043
arc_2012044
lo mas probable que el error sea al usar fgets(archivo1, 30, listado). fgets lee hasta encontrar el ENTER el cual tambien es almacenado en el arreglo archivo1
No es lo mismo abrir una cadena como "arc_2012041" que "arc_2012041\n".. Con fgets el salto de linea tambien pertenec al string

Te combiene usar fscanf o generar un ciclo con fgetc

Saludos


Título: Re: Busqueda desde txt en C++
Publicado por: cassiel83 en 3 Abril 2012, 18:39 pm
Tenias razon habia que usar fscanf. Al final lo he puesto asi:

Código:
while (fscanf(listado,"%s", archivo1)!=EOF)
{
sprintf(ruta,"D:\\carpeta\\%s",archivo1);
existe(ruta);
}

Muchas gracias ;-)


Título: Re: Busqueda desde txt en C++
Publicado por: cassiel83 en 4 Abril 2012, 17:29 pm
Otra vez me he atascado  :huh:, ahora el problema es que tengo el listado:

Código:
arc_201201.txt;10;20;30
arc_201202.txt;11;22;33
arc_201203.txt;12;23;34
arc_201204.txt;13;25;36

y no encuentro la manera de pasar los campos separados por el ";" a una variable para luego pasarla a la función.
he intentado hacerlo con un bucle con fgetc para que lea hasta encontrar el separador o el salto de linea pero esta funcion devuelve solo un caracter a la vez.
alguna idea de como podría hacerlo. Gracias y saludos.




Título: Re: Busqueda desde txt en C++
Publicado por: durasno en 4 Abril 2012, 18:10 pm
Hola! ahi ya se complica un poco mas. Lo que se me ocurre en este momento es que usas la funcion strtok. Te dejo un link para q veas el uso de strtok
http://c.conclase.net/librerias/index.php?ansifun=strtok#inicio

Cualquier cosa segui preguntando, saludos


Título: Re: Busqueda desde txt en C++
Publicado por: cassiel83 en 4 Abril 2012, 20:08 pm
Hola, ya lo he resuelto gracias a tu ayuda, funciona lo mas importante, ahora solo falta pulirlo, es cuestión de modificar un poco el bucle.

muchas gracias  ;D

me quedó así:

Código:
#include <stdio.h>
#include <string.h>

int main()
{
char var1[20];

char linea[50];
char token[5] = ";";

char *ptr;

FILE *listado;
listado = fopen("lista.txt", "r");


while (fscanf(listado,"%s", linea)!=EOF)
{
printf( "linea=%s\n", linea );

ptr = strtok( linea, token );
sprintf(var1,"%s",ptr);

printf("en variable %s\n", var1);

while( (ptr = strtok( NULL, token )) != NULL )
{
sprintf(var1,"%s",ptr);
printf("en variable %s\n", var1);
}
}

   return 0;
}


Título: Re: Busqueda desde txt en C++
Publicado por: durasno en 4 Abril 2012, 20:51 pm
Perfecto!! solo basta adaptarlo a tu necesidad y listo :)

Saludos