[C con Clase] Leer fichero de texto con "formato".

Jorge Vega Sanchez memmaker650 en gmail.com
Jue Mayo 6 13:43:45 CEST 2010


Vale muchas gracias, funciona perfecto.
On 06/05/2010, at 13:07, Steven Davidson wrote:

> Hola Jorge,
>
> 2010/5/6 Jorge Vega Sanchez <memmaker650 en gmail.com>
> A ver si lo explico bien. Tengo un par de programitas de prueba, en  
> uno escribo texto en un fichero con saltos de linea. Todo funciona  
> perfectamente.
> Ahora en el programa que debe leer el fichero y mostrarlo por  
> pantalla no consigo que se representen los espacios y los saltos de  
> linea.
>
> Esto es lo que tengo, a ver si me podeis ayudar porque ando que ya  
> no sé que probar.
>
>
> Veamos el código fuente.
>
>
> #include <iostream>
> #include <fstream>
> //#include <stdio.h>
>
> using namespace std;
>
> int main(int argc, char *argv[])
> {
>   /* Declaramos un array con suficiente tamaño para leer las líneas */
>        char cadena[100];
>   /* Fichero original, se abre para lectura pasando parámetros en la  
> declaración de la variable */
>   ifstream f;
>   f.open("fichero2.txt", ifstream::in);
>
>   /* Comprobar que se abierto correctamente */
>   if (!f)
>   {
>                cout << "fallo" << endl;
>                return -1;
>        }
>        /* Hacemos una primera lectura */
>        while (!f.eof())
>        {
>                /* Leemos la siguiente línea */
>                f >> cadena;
>
>
> Aquí está el problema. Estás leyendo la información con formato. La  
> operación de extracción >> saltará los espacios blancos: ' ', '\t',  
> '\n', '\r', '\f', y '\v'. Si quieres leer la información exactamente  
> en el fichero, entonces usa 'read()'. Sin embargo, en tu caso,  
> puedes usar 'getline()' sin muchos problemas. Por ejemplo,
>
> cin.getline( cadena, 100 );
>
>
>                if(cadena=='\n')
>
>
> Esto es incorrecto. No puedes comparar una cadena con un carácter.  
> Lo que realmente estás haciendo es comparar la dirección de memoria  
> del primer carácter de la cadena con el código ASCII del carácter  
> '\n'.
>
> De todas maneras, esta comparación ya no es necesaria.
>
>                {
>                        cout << endl;
>                }
>                else
>                {
>                        cout << cadena;
>                }
>        }
>        cout << endl;
>        f.close();
>        return 0;
> }
>
>
> Espero haber aclarado las dudas.
>
> Steven
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100506/6998c2b4/attachment.html>


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