[C++] Identificar fichero como argumento DUDA

ruben132

Saludos programadores!

Veréis, tengo una pequeña duda a la que no encuentro solución. Se trata de que x ejercicio se ejecute pasándole como argumento un fichero de texto y una opción "-n".

Como requisito, se me pide que vaya barajando las posibilidades de llamada del programa, tales como llamar el programa "programa -n -n" o "programa -f -n", etc...

El caso es que para que el programa ejecute necesita llamarse o bien "programa fichero.txt -n" o "programa -n fichero.txt" o "programa fichero.txt"

El caso es que necesito identificar en argv[1] y argv[2] si dichos argumentos son ficheros de texto o no. Básicamente se utiliza para cuando no se llame "-n" y para cuando se llame "fichero.txt fichero.txt".

Por esto, había pensado en crear una función que me identifique si el argumento pasado acaba en la cadena ".txt". La función que he realizado ha quedado así:

bool ExisteFichero(char *argv[], int n)
{
int i;
bool fiok;

fiok = false;
i = 0;

do {
if((argv[n][i] == '.' && argv[n][i+1] == 't') && (argv[n][i+2] == 'x' && argv[n][i+3] == 't'))
{
	fiok = true;
}
else
{
	i++;
	fiok = false;
}
   } while(fiok!=false);

return(fiok);

}

El caso es que al llamarlo en el programa principal como ...if (ExisteFichero(argv, 1) && ExisteFichero(argv, 2)
{
cout << "errorblabñablabla..." << endl;
}

me devuelve siempre falso y sigue por el else que le sigue y no consigo darle explicación.

Tengo dos preguntas:

¿Que haríais para identificar que un argumento es un fichero de texto?
¿Como puedo corregir esta función?

Muchas gracias chicos!

elkaoD

http://www.conclase.net/c/librerias/funcion.php?fun=strtok

javithelong

Personalmente no entiendo lo que quieres hacer, pero bueno.

Si no te vale con strtok (con lo mala que es esa función Kaod...) explicate algo mejor y le hecho un ojo.

Saludos!

_kRuStY_

No se si te he entendido muy bien. Pero si tiene que se "-n" o un fichero, porque no compruebas si es "-n" y si no lo es ya sabes que es un fichero.

Por otro lado, si quieres hacer la funcion para ver si termina en .txt, puedes utilizar strtok utilizando como separador el punto '.' -> strtok(argv[1],". \n"); . Asi el primer toke te devolvera el nombre del fichero, y el segundo toke sera "txt" y tonces ya sabras si se trata de un fichero.

PD: El uso de strtok parece mas complicado de lo que es, no se porque mucha gente le tiene mania, pero es muy muy util.

Espero haberte ayudado ^^

elkaoD

#3, para lo que quiere, con poco esfuerzo, le vale :P

#4, no es porque sea o no complicado, es porque está hecha con el ojete :D

Usuarios habituales

  • elkaoD
  • _kRuStY_
  • javithelong
  • ruben132