Para ALEJANDRO Especificamente, aunque otro puede ayudarme tambien .

Yuni
08 de Junio del 2004
Hola
Mira entendi perfectamente todo lo que me dices excepto cuando me dices que una forma de guardar los Objetos es guardarlos de a uno por linea, para leerlos después de la misma manera (siempre que no se trate de punteros). Realmente no me quedo claro eso. Dime si lo que trataste de decirme es que guarde cada uno de los atributos de un objeto personaen una linea uzando un separador que bien pudiera ser una coma o cualquier otro caracter. Pero me parece que si esa es una forma de hacerlo y no es posible hacerlo de forma completa o sea el objeto completo. No sera facil despues hacer un algoritmo que vuelva a conformar el objeto, en caso de que este tenga muchos atributos. o sea lo que quiero decirte es esto, Mira el ejemplo abajo.

Juan,20,Maculino //O sea guardar esos atributos en una sola linea y luego cuando lea el fichero separar cada atributo y formar nuevamente el objeto. No se si me entiendes. De todas formas si no fue esto lo que me quisiste decir explicame si puedes, de veras que te lo agradeceria, aunque de hecho ya te agradesco lo que haz hecho en otras ocaciones por mis dudas.

Alejandro_
08 de Junio del 2004
Hola de nuevo; antes que nada, qería recordar algo que ya había escrito Mariano, y es que en general no conviene pedir una respuesta a alguien en particular; por un lado, otros que sí podrían ayudarte pueden sentir que no son bienvenidos; por el otro, quizás el aludido no pueda responderte o no tenga la respuesta que buscas.

Con respecto a guardar datos en un archivo, linea a linea, usando la clase fstream, para después leerlos, acá va un ejemplo muy simple, compilado con el Dev C++:


#include<iostream>
#include<fstream>

using namespace std;

class CPersona
{
public:
CPersona() {
strcpy(nombre, "");
Edad = 0;
}
CPersona(char* nom, int aedad){
strcpy(nombre, nom);
Edad=aedad;
}
char* GetNombre() { return nombre; }
int GetEdad(){return Edad;}
private:
char nombre[30];
int Edad;
};

int main()
{
fstream gente("gente.dat", ios::in|ios::out|ios::trunc);
if(gente.fail()) {
cout << "error al abrir el archivo" << endl;
exit(1);
}
CPersona Uno("Juan", 20);
char n[30];
int e;

// escribe en el archivo, una linea por vez:
gente << Uno.GetNombre() << endl;
gente << Uno.GetEdad() << endl;


// vuelve al principio del archivo:
gente.seekg(0);

// lee la primera linea:
gente.getline(n, 30);
// lee el entero:
gente >> e;

// muestra en la consola:
cout << n << " edad: " << e << endl;

getchar();
return 0;
}
//-----------------------------------------------------

Notarás que sólo escribe y lee los registros de Uno, pero seguramente no te resultará difícil adaptar la idea a tus necesidades. Busca en la ayuda de tu compilador sobre las funciones y manipuladores de un ftream, el uso de iftream y oftream, y los modos de apertura del archivo.

Si tu compilador no es capaz de compilar este código simple, no lo dudes, cámbialo.

Alejandro