Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/01/2016, 17:47
coyoteazul
 
Fecha de Ingreso: enero-2016
Mensajes: 4
Antigüedad: 8 años, 4 meses
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