Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: blablablabla en 5 Agosto 2016, 17:06 pm



Título: Dudas sobre Programar en C++
Publicado por: blablablabla en 5 Agosto 2016, 17:06 pm
Estoy intentando leer una cantidad de datos para asignarlo al espacio de un arreglo (vector) usando un ifstream, pero el programa me los asigna de manera errada, no asignando el valor correcto de cada hora. La tabla que esta abajo es un ejemplo del input data para el codigo.

Hora              Valor
00:00                0
01:00                0
02:00                0
03:00                4560
04:00                150
05:00                0
06:00                0

Estoy usando esta parte del codigo para leer los valores y asignarlo al espacio del arreglo Minlet.

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <vector>

ifstream inFile;   inFile.open("data_Minlet_Andasol1.txt");
    if (inFile.fail()){ cout << "Error Opening File" <<endl; exit(0); }

    string lecture;

    for (i=0; i<tmax; i++)
        inFile>>lecture>>Minlet;

Los valores estoy tomando desde un archivo de texto que solamente contiene los valores (sin las horas) como si el archivo fuera el siguiente:

0
0
0
4560
150.3
0
0

Al correr el codigo, no me asigna los valores en las posiciones correctas y no me distingue entre el 4560 y el 150.3

¿Alguien tiene idea de como leer los valores de un archivo de texto (como el de arriba), asignar cada valor a un espacio de un arreglo para despues usar ese arreglo?.

Estoy un poco confundido y no tengo mucha experiencia programando.


Título: Re: Dudas sobre Programar en C++
Publicado por: ivancea96 en 5 Agosto 2016, 17:11 pm
Código
  1. for (i=0; i<tmax; i++)
  2.    inFile>>lecture>>Minlet;
Estás leyendo 1 valor y guardándolo en lecture, y otro para guardarlo en Minlet.

querrías decir:
Código
  1. for (i=0; i<tmax; i++)
  2.    inFile>>Minlet[i];
Para guardarlo en Minlet.
no sé qué es Minlet, así que no sé si eso es correcto. Suponiendo que es un vector<string> con un tamaño de tmax, funcionaría. Si el vector tiene tamaño 0, entonces sería:
Código
  1. for (i=0; i<tmax; i++){
  2.    inFile>>lecture;
  3.    Minlet.push_back(lecture);
  4. }

O:
Código
  1. Minlet.resize(tmax);
  2. for (i=0; i<tmax; i++)
  3.    inFile>>Minlet[i];


Título: Re: Dudas sobre Programar en C++
Publicado por: blablablabla en 5 Agosto 2016, 17:17 pm
OK. Minlet es un vector, que tiene tamaño conocido y lo declare de esta manera.

vector<double> Minlet(tmax+1)

El punto es que es una lista de 8000 datos y estoy corriendo para varios casos. Quiero que del archivo .txt pueda asignar cada dato de esos 8000 a un espacio del vector Minlet. Estoy probando con 24 horas, pero no me los asigna correctamente.

Cuando te refieres a que esta leyendo 1 valor, es solamente a un digito?

Gracias por tu ayuda


Título: Re: Dudas sobre Programar en C++
Publicado por: blablablabla en 5 Agosto 2016, 18:13 pm
Alguien tiene idea de como hacer eso? Necesito ayuda para eso, porque solo se me ocurre poner los datos de manera manual


Título: Re: Dudas sobre Programar en C++
Publicado por: ivancea96 en 5 Agosto 2016, 18:31 pm
1 número. Pero como lo tenías, leías 2 veces, osea que leías 2 líneas.

Probaste este?
Código
  1. for (i=0; i<tmax; i++)
  2.    inFile>>Minlet[i];


Título: Re: Dudas sobre Programar en C++
Publicado por: blablablabla en 5 Agosto 2016, 18:48 pm
Funciono perfecto. Muchas gracias, ahora si los leyó correctamente.

Ahora, ¿porque razón leía 2 lineas en vez de 1?


Título: Re: Dudas sobre Programar en C++
Publicado por: ivancea96 en 5 Agosto 2016, 19:04 pm
Código
  1. inFile>>lecture>>Minlet[i];

Es equivalente a:
Código
  1. inFile>>lecture;
  2. inFile>>Minlet[i];
Eso es, leer primero una string, y luego un número. 2 líneas.


Título: Re: Dudas sobre Programar en C++
Publicado por: blablablabla en 5 Agosto 2016, 19:24 pm
Muchas gracias por tu ayuda ivancea96