elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda, leer archivos en c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda, leer archivos en c++  (Leído 2,353 veces)
thxly

Desconectado Desconectado

Mensajes: 2


Ver Perfil
ayuda, leer archivos en c++
« en: 31 Enero 2015, 06:18 am »

Hola,
bueno lo que estoy haciendo es leer un archivo y dividirlo en dos, pues hasta aquí todo bien, tengo los archivos creados con sus respectivos registros.
Pero al momento de leer uno de los archivos que cree antes y poner los datos en un vector, solo ingresa la primera linea del archivo al vector. Si mando a imprimir lo que devuelve de la función getline me muestra los demás registros.No se porque solo se ingresa la primera linea del archivo.

Este es el código que estoy utilizando, tal vez algún consejo?

Código:
vector<string> archivo::cDatos(string ruta){
vector<string> datos;
fstream fichero;
fichero.open(ruta.c_str(),ifstream::in);
string linea="";
while(getline(fichero,linea,'\n')!=NULL){
cout<<"linea: "<<linea<<endl;
datos.push_back(linea);
}
fichero.close();
return datos;
}

Y en consola muestra(por ejemplo):

linea: 4.8,3,1.4,0.1,Iris-setosa
4.7,3.2,1.6,0.2,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa


En línea

Orubatosu


Desconectado Desconectado

Mensajes: 2.515


Ver Perfil WWW
Re: ayuda, leer archivos en c++
« Respuesta #1 en: 31 Enero 2015, 13:18 pm »

Sin mirar mucho en profundidad, veo que usas

Código
  1. while(getline(fichero,linea,'\n')!=NULL){

¿Porque no usar algo con menos problemas potenciales como?

Código
  1. while(!fichero.eof()){

Simplemente: "Mientras el objeto "fichero" no llegue al final..."

Asi te aseguras de que el while pase por todas las líneas hasta el final


En línea

"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: ayuda, leer archivos en c++
« Respuesta #2 en: 31 Enero 2015, 17:01 pm »

Pero al momento de leer uno de los archivos que cree antes y poner los datos en un vector, solo ingresa la primera linea del archivo al vector. Si mando a imprimir lo que devuelve de la función getline me muestra los demás registros.No se porque solo se ingresa la primera linea del archivo.

Este es el código que estoy utilizando, tal vez algún consejo?
Si agregamos esa función (ligeramente modificada) a un programa de prueba funciona correctamente así que el error que mencionas se debe generar en alguna otra parte del programa, por favor publica su código fuente completo (por supuesto en la forma mas pequeña posible).

Dos sugerencias en relación a esa función son 1) Los objetos de tipo string se inicializan con una cadena vacía, no es necesaria la asignación y 2) getline retorna el objeto de tipo istream utilizado como su primer argumento, no hay porque compararlo contra NUll, quita esa comparación.

----

¿Porque no usar algo con menos problemas potenciales como?
Código
  1. while(!fichero.eof()){
Simplemente: "Mientras el objeto "fichero" no llegue al final..."
No porque en realidad mete mas problemas.

Las funciones feof/eof de C/C++ retornan verdadero en base a la ultima operación de lectura, por ello un bucle controlado por esas funciones tendrá una iteración de mas (a eso hay que agregar que la gran mayoría de las funciones retornan el resultado de la operación de E/S) por lo que no se recomienda su uso mas que en contados escenarios.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: ayuda, leer archivos en c++
« Respuesta #3 en: 31 Enero 2015, 17:19 pm »

Y creo que el NULL estaría de mas no?

Código:
while(getline(fichero,linea,'\n')){

Si la funcion retorna NULL, la sentencia del while se evaluaria como falsa?

http://www.parashift.com/c++-faq/istream-and-eof.html
« Última modificación: 31 Enero 2015, 17:23 pm por _Enko » En línea

thxly

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: ayuda, leer archivos en c++
« Respuesta #4 en: 1 Febrero 2015, 07:11 am »


Gracias por sus respuestas. el archivo original lo puse en un struct, no se si tal vez estoy ingresando allí algo mal.
Mi código para el struct:
Código:
struct IRIS{
double sl;
double sw;
double pl;
double pw;
string clase;

void llenarDatos(string linea){
stringstream ss;
ss << linea;
string token="";
for(int i=0;i<COLS;i++){
getline(ss,token,',');
stringstream aux;
aux << token;
switch(i){
case 0:
aux >> sl;
break;
case 1:
aux >> sw;
break;
case 2:
aux >> pl;
break;
case 3:
aux >> pw;
break;
case 4:
clase=token;
break;
}
}
}

string toString(){
stringstream ss;
ss << sl << "," << sw <<","<< pl << "," << pw << "," << clase;
return ss.str();
}
};

Mi codigo para leer el archivo:
Código:
vector<IRIS> archivo::cargarDatos(string ruta){
IRIS muestra;
string linea="";
ifstream fichero;
vector<IRIS> datos;
fichero.open(ruta.c_str(),ios::in);
if(fichero.is_open()){
cout<<"ok"<<endl;
                while((getline(fichero,linea,'\n'))!=NULL){
  muestra.llenarDatos(linea);
datos.push_back(muestra);
        }
}else{
cout<<"error al abrir el fichero"<<endl;
}


return datos;
}
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Leer archivos :S
Programación Visual Basic
Thaorius 3 1,361 Último mensaje 15 Febrero 2006, 02:44 am
por Thaorius
Leer archivos
Programación Visual Basic
likeu 6 1,764 Último mensaje 25 Agosto 2006, 13:14 pm
por likeu
Leer archivos // Leer un dato en concreto
Programación C/C++
uhuru 3 2,191 Último mensaje 22 Mayo 2010, 14:14 pm
por uhuru
ayuda que archivos leer
Nivel Web
antoniocaro 0 1,181 Último mensaje 14 Julio 2011, 09:46 am
por antoniocaro
[AYUDA][PYTHON] Leer y guardar archivos .exe de forma hexadecimal en python???
Scripting
Noxware 3 3,367 Último mensaje 22 Agosto 2014, 09:33 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines