• Domingo 17 de Noviembre de 2024, 19:26

Autor Tema:  Escribiendo en un fichero  (Leído 1181 veces)

lydia_watanabe

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Escribiendo en un fichero
« en: Lunes 9 de Marzo de 2009, 23:08 »
0
Hola a todos

En una aplicación que estoy haciendo tengo que escribir en un fichero, pero tengo un problema.

La situación es la siguiente, tengo un fichero ya creado, por ejemplo este:

Código: Text
  1. 1       100     (1,8,3)
  2. 4       20      ()
  3. 2       40      (2,6)
  4.  

Y se me presentan dos situaciones, la de escribir al final de una linea y la de sobreescribir un dato.

Supongamos la situación 1 que la de escribir al final de una linea:

Código: C++
  1. fstream Fich("students.txt", ios::in | ios::out);
  2.  
  3. // Va leyendo los datos, hace diversas cosas con ellas y llega al final de la linea
  4.  
  5. long lon = Fich.tellg();
  6. Fich.seekp(lon, ios::beg);
  7. Fich << " OK" << endl;
  8.  

Al hacer esto obtengo como resultado lo siguiente:

Código: Text
  1. 1       100     (1,8,3) OK
  2. 0       ()
  3. 2       40      (2,6)
  4.  

Lógicamente no es el resultado que esperaba pues he perdido parte de la informacón de la segunda linea y eso no me intersa. ¿Qué puedo hacer para solucionar este problema?

Con respecto a la segunda situación, la de sustituir un valor, lo que me interesa es borrar un valor, por ejemplo el 100, del fichero y en base a unos parámetros o poner un valor distinto o no poner nada, lo que quedaría algo así:

No poner nada
Código: Text
  1. 1       (1,8,3)
  2. 4       20      ()
  3. 2       40      (2,6)
  4.  

Sustituir por otro valor
Código: Text
  1. 1       12     (1,8,3)
  2. 4       20      ()
  3. 2       40      (2,6)
  4.  

¿Sería esto posible? cómo lo puedo hacer.

betopin

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
    • http://www.programasenc.blogspot.com
Re: Escribiendo en un fichero
« Respuesta #1 en: Miércoles 11 de Marzo de 2009, 01:41 »
0
Para amboss casos yo haria lo mismo...guardaria la informacion en un array bidimensional operando el fichero en modo lectura y acorde a las modificaciones hechas desde EL ARREGLO, sobreescribiria el archivo en modo W...creo que para el casoes mejor porque tendrias acceso desde el array linea a linea....

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Escribiendo en un fichero
« Respuesta #2 en: Miércoles 11 de Marzo de 2009, 09:51 »
0
Yo también estoy de acuerdo con betopin: creo que cargar primero los datos en una estructura de datos, manipularlos y volver a escribirlos es la mejor forma de hacerlo, más que estar usando seekp().

Salud

lydia_watanabe

  • Miembro activo
  • **
  • Mensajes: 27
    • Ver Perfil
Re: Escribiendo en un fichero
« Respuesta #3 en: Miércoles 11 de Marzo de 2009, 12:50 »
0
Hombre, como solución no está mal, pero aunque este ejemplo es sencillo sólo con tres lineas, se supone que el archivo será sustancialmente mayor y sinceramente no me parece una buena opción, pues sería mucho trabajo extra y en muchos de los casos innecesario, pues hacer la escritura, ya no es necesario seguir leyendo el archivo, porque se han dado las condiciones necesarias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Escribiendo en un fichero
« Respuesta #4 en: Miércoles 11 de Marzo de 2009, 13:42 »
0
Cita de: "lydia_watanabe"
pues sería mucho trabajo extra y en muchos de los casos innecesario, pues hacer la escritura, ya no es necesario seguir leyendo el archivo, porque se han dado las condiciones necesarias.
Ok, pero yo no he dicho en ningun caso que haya que leer todo el fichero. Puedes hacerlo línea por línea y reescribir líneas enteras.

Salud