13/01/2016, 17:47
|
| | Fecha de Ingreso: enero-2016
Mensajes: 4
Antigüedad: 9 años Puntos: 0 | |
Guardar y leer objeto en archivo Hola. Tengo un codigo que lee datos de un .txt, los procesa y los asigna a una clase. Lo que quisiera es guardar los objetos correspondientes a esa clase en un binario y recuperarlos la proxima vez que ejecute el programa.
En realidad solo necesito guardar los atributos "referido" y "clicks" que se ira acumulando con nuevos datos cada dia. El resto de los datos los puedo obtener del .txt. Entonces guardaria el atributo en otro.txt (aun estoy aprendiendo c++ y no termino de entender los archivos binarios) pero luego para recuperarlo tendria que reprocesarlo y convertirlo en un array o vector. No estoy seguro de que esta sea la opcion mas eficiente y por ello les solicito ayuda para guardar el objeto entero en un binario (de paso consigo practica con los binarios )
Desde ya muchas gracias por su ayuda
Código:
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h> //para usar atoi que pasa de string a int // atof pasa de string a float
#include <sstream> // para usar ostringsteam que pasa de int a string
class referidosRegistro
{
public:
int numero;
string bandera;
string referido;
string referidoDesde;
string fechaExpiracion;
string ultimoClick;
int clicks;
float media;
int fechaExpiracionDias; //calculado
//funcion que toma un getline declarado en creaClaseReferidoRegistro y lo transforma en un array. Tambien llama a la funcion declarador
void stringToArray(string lineaReferido);
//funcion que toma el array de la funcion anterior, convierte los tipos necesarios y los asigna como datos de la clase
void declarador (string _numero, string _bandera, string _referido, string _referidoDesde, string _fechaExpiracion, string _ultimoClick, string _clicks, string _media);
};
//funcion que inicia la creacion de la clase
void creaClaseReferidoRegistro ()
{
ifstream listaReferidos;
listaReferidos.open("referidos.txt",ios::in);
referidosRegistro referido[100];
for (int i=0; i <=99; i++)
{
string lineaReferido;
getline(listaReferidos, lineaReferido);
referido[i].stringToArray(lineaReferido);
};
};
//funcion que toma un getline de creaClaseReferidoRegistro y lo transforma en un array. Tambien llama a la funcion declarador
void referidosRegistro:: stringToArray(string lineaReferido)
{
string _lineaReferido = lineaReferido;
int lastPosicion = 0;
int posicion = 0;
string referidoArray[8];
int i = 0;
while (posicion != -1)
{
posicion = _lineaReferido.find(";",lastPosicion+1);
if (i==0)
{
referidoArray[i] = _lineaReferido.substr(lastPosicion, posicion - lastPosicion);
}
else
{
referidoArray[i] = _lineaReferido.substr(lastPosicion+1, posicion - lastPosicion -1);
}
i++;
lastPosicion = posicion;
};
declarador(referidoArray[0], referidoArray[1], referidoArray[2], referidoArray[3], referidoArray[4], referidoArray[5], referidoArray[6], referidoArray[7]);
};
//funcion que toma el array de la funcion anterior, convierte los tipos necesarios y los asigna como datos de la clase
void referidosRegistro:: declarador (string _numero, string _bandera, string _referido, string _referidoDesde, string _fechaExpiracion, string _ultimoClick, string _clicks, string _media)
{
numero = atoi(_numero.c_str());
bandera = _bandera;
referido = _referido;
referidoDesde = _referidoDesde;
fechaExpiracion = _fechaExpiracion;
ultimoClick = _ultimoClick;
clicks = atoi(_clicks.c_str());
media = atof(_media.c_str());
fechaExpiracionDias = fechaADias(fechaExpiracion);
};
int main()
{
creaClaseReferidoRegistro();
};
Última edición por coyoteazul; 13/01/2016 a las 18:06
Razón: olvido
|