Leer archivo de texto con fecha y precios en C++

Tengo una tarea en C++ en que debo leer un listado de precios de un indice accionario. La información viene complicada para mi porque cada renglón consiste en una fecha y precio. Ejemplo 01/11/2004,105.48. Esto es una fecha y un float. No tengo problemas para construir el array leyendo la información del archivo de texto si es que solo fueran los precios, el problema es que: (1)no se como leer cada renglón para que me lea la fecha y el precio por separado, (2) No se como hacerlo con las fechas porque después debo ordenar por fecha. Intente con la clase String y separe exitosamente los datos, pero el problema ahora es que no se como volver de la clase string a float para el precio, ni como tratar la fecha.

1 respuesta

Respuesta
1
No se si esto te sirva, si no es así, házmelo saber
#include<fstream.h>
void main()
{
    char date[10];
    double price;
    ifstream read;
    read.open("filex.txt",ios::in);
    if(!read)
      cout<<"Can't read the file";
    while(read>>date)
    {
        read>>price;
        cout<<date<<" "<<price<<endl;
    }
    read.close();
}
Hola,
Muchas gracias. Es bastante más corto que mi código que es una vuelta gigante. El problema es que tu solución me lee mal el archivo.
Te reproduzco el resultado (antes del espacio lo que entiende como fecha, y después el precio):
01/02/2001,1108.48      1
/05/2004,1122.22      1
/06/2004,1123.67      1
Etc...
Como ves, no lee bien la fecha ni el precio... e intente cambiándole el largo del string, leyendo primero uno y después el otro, pero aun así no lo logro. HEEEELP
Generalmente en archivos de texto el separador de datos es el espacio
01/04/2008   115.2
08/02/2008   250.36
24/05/2008   125.5
Coloca en ese formato los datos de tu archivo sin la coma como separador y funcionara. Ahora si la coma com separador es un requisito te daré otra solución, ¿de acuerdo?
Lamentablemente si es requisito. Lo que hice hasta ahora, pero que son muchas lineas de código, es traerme todo el string, luego separarlo con strtok, luego convertir el string fecha en clase string y dejarlo como YYYYMMDD, y el string de date lo pase a float con strtof. Es largo, pero lo logre. Si hay algo más corto que eso lo agradecería. Por cierto, muchísimas gracias por las respuestas. Si no logras encontrar una solución más corta, quizás me podrías ayudar con alguna forma para contar la cantidad de lineas en el fichero de texto para flexibilizar el largo del array, así como el largo de cada string. Ahora los tengo fijos pero se que no esta bien hacerlo así.
Muchas gracias!
De nuevo creo que esto esta mejor, dime si necesitas algo más
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<alloc.h>
#include<io.h>
void main()
{
    char info[20],*data;
    float price;
    long nRegistros,nBytes;
    ifstream read;
    read.open("filex.txt",ios::in);
    if(!read)
      cout<<"Can't read the file";
    struct stRegistro//este registro es la estructura del archivo
    {
                char info[20];
    }reg;
    read.seekg(0, ios::end); // Colocar el cursor al final
    nBytes = read.tellg(); // Tamaño en bytes
    nRegistros = read.tellg()/sizeof(stRegistro); // Tamaño en registros
    cout<<"Numero de Registros"<<nRegistros+1<<endl;
    read.seekg(0,ios::beg);// Colocar el cursor al inicio
    while(read>>info)
    {
        data = strtok(info,",");
        price = atof(strtok(NULL,","));
        cout<<data<<" "<<price<<endl;
    }
    read.close();
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas