Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Saltos de linea con fstream en C++

Estas en el tema de Saltos de linea con fstream en C++ en el foro de C/C++ en Foros del Web. Buen Dia para todos.... Literalmente no se como %$&^$$%#$% hacer lo siguiente... Quiero copiar una fichero a otro, con la condicion de que en la ...
  #1 (permalink)  
Antiguo 01/06/2012, 10:39
Avatar de ffaffy  
Fecha de Ingreso: agosto-2010
Mensajes: 11
Antigüedad: 14 años, 3 meses
Puntos: 0
Pregunta Saltos de linea con fstream en C++

Buen Dia para todos....

Literalmente no se como %$&^$$%#$% hacer lo siguiente...

Quiero copiar una fichero a otro, con la condicion de que en la ultima linea no me coloque salto de linea o fin de linea es decir "\n" o "endl" , lo que tengo es:

supongamos que el archivo prueba.txt contiene:
123
456
789

Código C++:
Ver original
  1. //variables
  2. int valor;
  3.  
  4. //leo el archivo
  5. ifstream leer("prueba.txt", ios::in);
  6.  
  7. //prepara el archivo que copia
  8. ofstream copiar("copia.txt", ios::out);
  9.  
  10. while(!leer.eof()){ //Verifico si hay algo para leer
  11.   leer >> valor; //leo cada linea
  12.   copiar << valor<<endl; // copia la linea en copia.txt
  13. }

Al copiar si no pongo al final <<endl; se copia asi: 123456789
entonces por orden pongo <<endl; y me queda copiada asi:
y se entiende que queda algo asi, el <<endl; en TXT no se ve, claro esta
23 <<endl;
456 <<endl;
789 <<endl;

Pero aqui mi problema, no entiendo porque pero me pasa...cuando intento leer copia.txt y mostrar el contenido en pantalla, la ultima linea se repite y he determinado que se debe a que la ultima linea tiene un salto o fin de linea "\n" ó "endl"....repito no entiendo porque pero se imprime asi:

123
456
789
789

Entonces creo que la solucion seria un for interno no se, que coloque saltos o fin de linea hasta la penultima linea....pero no se como hacerlo dentro del while y con que criterio determine cuantas lineas tengo o cual es la penultima/ ultima linea.

espero me entiendan y me puedan ayudar estoy al borde de un colapso nervioso

GRACIAS
  #2 (permalink)  
Antiguo 01/06/2012, 14:56
Avatar de ffaffy  
Fecha de Ingreso: agosto-2010
Mensajes: 11
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Saltos de linea con fstream en C++

ya lo solucione.....tal vez no sea la adecuada pero funciona.... aquí dejo el como para quien lo necesite...

Código C++:
Ver original
  1. int contar = 1;
  2.          FILE *leer = fopen("archivo.txt", "r");
  3.          int hc, fin = 1;
  4.          while (EOF != (hc=getc(leer)))
  5.               if ('\n' == hc)
  6.                ++contar;

despues en el while donde verifico que el archivo tenga datos con...

Código C++:
Ver original
  1. ifstream extraer("otro.txt");
  2.                while(!extraer.eof()){ ........

Solamente se verifica con un if o for si es la ultima linea no haga salto de linea si no endl;.....

Espero sea de ayuda
  #3 (permalink)  
Antiguo 04/06/2012, 01:03
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses
Puntos: 73
Respuesta: Saltos de linea con fstream en C++

Lo que te pasó es lo siguiente:

Al leer el fichero, cuando lees la última línea, aún no ha leído la marca de final de fichero. Cuando intentas leer de nuevo, entonces es cuando te detecta el final del archivo, pero te devuelve como leído la última lectura "buena" que hizo. Por eso, en tu salida te aparece repetida la última línea. Si la solución que aplicaste funciona, perfecto, pero quizás sea más fácil así:

Código C++:
Ver original
  1. while (!leer.eof())     //Verifico si hay algo para leer
  2. {
  3.     leer >> valor;      //leo cada linea
  4.     if (leer.eof())     // Compruebo si he leido la marca de final de fichero
  5.         break;          // Si es así, finalizo el bucle de lectura
  6.     // AQUI CONTINÚO EL PROCESADO DE LOS DATOS DEL FICHERO...
  7.     ...
  8. }
  #4 (permalink)  
Antiguo 04/06/2012, 08:12
Avatar de ffaffy  
Fecha de Ingreso: agosto-2010
Mensajes: 11
Antigüedad: 14 años, 3 meses
Puntos: 0
Sonrisa Respuesta: Saltos de linea con fstream en C++

hey muchas gracias....soy novato en C++ y me ha parecido un tanto engorroso algunos temas como el manejo de ficheros...genial el aporte

Etiquetas: c++, escritura, ficheros, fstream, lectura, saltos, txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:45.