Será posible que nadie sepa esto????????

Konak
23 de Enero del 2005
Tengo un problemita con fichero. Estoy haciendo una aplicacion en c++ y necesito guardar los datos de cada persona contenido en un array ,en un fichero de esta manera
ofstream ofs("Persons.txt",ios::app)
int i=0;
while(i<Ultimo)
{
ofs<<Persona[i].Nombre<<" "<<Persona[i].Edad<<endl;
}
Esta es la forma de guardar en el fichero y lo hace perfectamente. Pero el problema esta en que cuando leo el fichero para formar los objetos personas de la sigueinte manera
ifstream ifs("persons.txt",ios::in)
string nombre;
int edad;
while(!ifs)
{
ifs >> nombre >> edad;
CPersona p=new CPersona(nombre,edad);
lista.AddPersona(p);
}

si ninguna persona de las que guarde en el fichero tiene un espacio en el nombre, no hay problemas entonces, pero por ejemplo si guardo
Luis 30
Juan 10
Carlos 60
Pedro Luis 20
solo carga hasta la persona Carlos porque al parecer hay problemas con esa separacion entre el nombre Pedro Luis, Diganme como podria hacer para cargar ese fichero correctamente aunque ponga nombre conceparacion


Nota: Tengo que hacerlo con clases no con las struct de C.
Salu2 Konak

DJ AZ
23 de Enero del 2005
Bueno, creo que lo que pasa es que el compilador te toma el caracter "espacio" como fin de linea y es por eso que no aparece la segunda parte del nombre. Esto pasa a menudo con caracteres de espacio, de retorno de carro y de nueva linea, entre otros caracteres de manejo de texto. Ya que debes utilizar clases, una de dos: o en vez de un espacio agregas "_"(guion bajo), o creas otro array perteneciente a la clase, con el cual puedas leer secuencialmente cada uno de los nombres, caracter por caracter, y si dentro de la lectura se encuetra un espacio, imprima un caracter de tabulacion u otro que te sea mas conveniente, y que siga leyendo el resto del registro.

en pseudo:

char array_de_chequeo;
leer "archivo" hasta eof
{
leer registro;
si archivo.nombre==" "
imprimir t;
}


La otra que se me ocurre seria crear una funcion de clase que te permita realizar la lectura y busqueda secuencial del caracter de espacio y que la uses en el campo "nombre" de todos los registros. Si devuelve un valor, que imprima tabulacion o algo mas conveniente para ti.

Espero que te sirva!!!Saludos!!

Konak
23 de Enero del 2005
Muchas gracias por la pequeña ayuda que me diste Chamo, ya resolvi el problemita de leer el fichero. Pero lo resolvi con una funcion que tiene este tipo de archivos que se llama getline(), esta funcion resibe entre sus parametros un caracter un ceparador que lee una cadena en un archivo hasta donde encuentra el caracter separador que guarde junto con la cadena, en este caso el nombre. y aunque encuentre un espacio continua leyendo hasta el separador.

Gracias de todas formas.