[C con Clase] Como leer un archivo de texto que tiene que ser indicado en la ejecucion

Steven Richard Davidson stevenrichard.davidson en gmail.com
Jue Nov 8 19:52:39 CET 2007


Hola Vanesa,

On 11/7/07, Vanesa DVJ (fr) <vanedvj en yahoo.fr> wrote:
> Hola,
>
> gracias a los buenos consejos recibidos hace unas semanas, hoy vuelvo por
> más...
>
> Estoy haciendo una practica que producira estadisticas, basandose en datos
> que se encuentran en un archivo de texto, con un formato determinado.
>
> La cuestion es que se supone que el usuario del programa indicara el nombre
> del archivo durante la ejecucion del programa (es el primer requerimiento
> que tendra para poder trabajar)
>
> Dado mis escasos conocimientos no se como se realiza esta tarea, inclui en
> el menu la frase: "Indique el archivo a ser procesado",  pero hete aqui, no
> se bien como capturarlo en el cin. Es decir, tendria que dar la posibilidad
> de una busqueda en distintas carpetas o algo asi, pero esto escapa lejos a
> mis conocimientos.
>

Veamos. La forma más sencilla para ti, y para tu programa, es permitir
al usuario introducir la ruta y el nombre del fichero; o sea, que el
usuario "busque" la información. Así no tenemos que agregar mayor
complejidad a nuestro programa. Por ejemplo,

ifstream ifsEntrada;
char szNombre[1024];

cin.getline( szNombre, 1024 );

ifsEntrada.open( szNombre );
...

Si quieres "buscar", entonces esto ya es cuestión tuya. Me temo que no
existe nada estándar para manejar directorios, ya que un sistema de
directorios depende del sistema operativo que exista. Por lo tanto,
tendrías que hacer uso de funciones no estándares y especializadas en
el sistema operativo a usar. Por ejemplo, bajo MS-Windows, existe la
gama de funciones, 'FindFirstFile()', 'FindNextFile()', y
'FindClose()'. También puedes usar 'SearchPath()'.

Otra manera, algo "estándar", es usar 'system()' para ejecutar
comandos en el intérprete de comandos (en la consola). Por ejemplo,
podrías usar "dir" para obtener una lista de directorios. Bajo
MS-Windows, sería algo como,

system( "dir /ad /b >> lista_temp.txt" );

Abriríamos, "lista_temp.txt", para sacar la información que queremos.
Al finalizar, borraríamos este fichero temporal invocando 'remove()',
por ejemplo.

Bajo otras plataformas y bibliotecas, tendrás que usar otra forma.


En cuanto al nombre del fichero, ten presente que puede haber
espacios. Con 'cin >>', tendremos problemas, porque los espacios son
interpretados como separadores entre cadenas. Para solucionar este
problema, usamos la función miembro 'getline()', como he demostrado
previamente. También podemos usar un objeto de la clase 'string' y
usar la función global 'getline()' para 'string'. Esto es lo que te
comentó Zelion.


Espero haber aclarado la duda.

Steven




Más información sobre la lista de distribución Cconclase