Programación General > C/C++

 Escribiendo en un fichero

(1/1)

lydia_watanabe:
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       100     (1,8,3)4       20      ()2       40      (2,6) 
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++ ---fstream Fich("students.txt", ios::in | ios::out); // Va leyendo los datos, hace diversas cosas con ellas y llega al final de la linea long lon = Fich.tellg();Fich.seekp(lon, ios::beg);Fich << " OK" << endl; 
Al hacer esto obtengo como resultado lo siguiente:


--- Código: Text ---1       100     (1,8,3) OK0       ()2       40      (2,6) 
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,8,3)4       20      ()2       40      (2,6) 
Sustituir por otro valor

--- Código: Text ---1       12     (1,8,3)4       20      ()2       40      (2,6) 
¿Sería esto posible? cómo lo puedo hacer.

betopin:
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:
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:
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:

--- 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.
--- Fin de la cita ---
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

Navegación

[0] Índice de Mensajes

Ir a la versión completa