Tema destacado: Entra al canal IRC oficial de #elhacker.net
Autor
|
Tema: Leer todas líneas de un fichero C++ (Leído 6,291 veces)
|
savanibi
Desconectado
Mensajes: 12
|
Hola amig@s, tengo un archivo y quiero leer las líneas, pero con la función getline, sólo me lee todo el rato la primera línea, y quisiera guardarlas todas para luego manejarlas. Tengo hecho esto:
char * nombre= new char[10]; char * apellido1= new char[10]; char * apellido2= new char[10];
ifstream leer; leer.open("fichero.txt");
while(!leer.eof()) { leer.getline(numero,50,';'); // leer.getline(nombre,50,';'); //leer.getline(result,50,'\n');
LabelLeer->Caption=numero;
|
|
|
|
|
En línea
|
|
|
|
savanibi
Desconectado
Mensajes: 12
|
Esto es el código que tengo:
char * nombre= new char[10]; char * apellido1= new char[10]; char * apellido2= new char[10];
ifstream leer; leer.open("fichero.txt");
while(!leer.eof()) { leer.getline(nombre,50,';'); leer.getline(apellido1,50,';'); leer.getline(apellido2,50,'\n'); }
Y si visualizao nombre, es todo el rato el de la primera línea, me podría ayudar?
Muchas gracias.
|
|
|
|
|
En línea
|
|
|
|
Anibal784
Desconectado
Mensajes: 762
Yo no la vote, pero me la tengo que aguantar igual
|
No se bien cuál es tu problema, no se entiende. Pero por lo pronto leete bien qué es lo que hace getline.
|
|
|
|
|
En línea
|
El que llega sin que lo llamen, se va sin que lo echen. Vos no la votaste por eso la tenes adentro.
Lo fino no es lo tuyo, y a mi me chupa un huevo, soy argentino y no peronista, y eso es lo que realmente te molesta.
|
|
|
GroK
Desconectado
Mensajes: 680
...I have become comfortably numb...
|
Tu problema esta en que, cuando termines de leer una linea, guardar los datos en un vector o array contenedor, que contenga los nombres y apellidos de cada una de las lineas que leiste; si no, en cada iteracion del bucle te va a machacar lo que tenian esas variables.
Saludos
|
|
|
|
|
En línea
|
"I put on my Hendrix album and my son said 'Dad, who's that?' and i said 'Well son, that's God' "- Robert Plant
|
|
|
savanibi
Desconectado
Mensajes: 12
|
Hola, hago esto pero tampoco funciona:
while (leer.eof()) { leer.getline(&nombre,10,';'); leer.getline(&apellido1,10,';'); leer.getline(&apelledo2,10,'|n'); i++; } LabelLeer->Caption=nombre[5];
Quiero leer un archivo txt donde tengo una forma así:
Nombre1;Apellido11;Apellido21 Nombre2;Apellido12;Apellido22 Nombre3;Apellido13;Apellido23 ...
Y quiero leer cada línea y almacenarlo en alguna cadena como esa, pero no me salen. Les agradezco si me podría ayudar. Gracias.
|
|
|
|
|
En línea
|
|
|
|
savanibi
Desconectado
Mensajes: 12
|
Perdón por el post anterior hay un error que me di cuenta, que al pegar no se pegó bien:
while (leer.eof()) { leer.getline(&nombre [ i ] ,10,';'); leer.getline(&apellido1 [ i ] ,10,';'); leer.getline(&apelledo2 [ i ] ,10,'|n'); i++; } LabelLeer->Caption=nombre[5];
|
|
|
|
|
En línea
|
|
|
|
savanibi
Desconectado
Mensajes: 12
|
Pero tampoco funciona, cuando visualizo el nombre en la posición 5, nada, salen caracteres extraños.
Gracias.
|
|
|
|
|
En línea
|
|
|
|
savanibi
Desconectado
Mensajes: 12
|
Hola.
Creo que el problema está con el while, porque creo que no hace nada con él.
while (!leer.eof()), es decir, que el eof no lo encuentra o algo cuando lee el fichero, porque lo otro por separado funciona para leer cada campo de la primera línea, pero el resto haciendo esto del while, no lee nada, de hecho me da error de ejecución.
Si ven el error claro, les agradezco me digan.Gracias.
|
|
|
|
|
En línea
|
|
|
|
savanibi
Desconectado
Mensajes: 12
|
Hola, les comento sobre el programa un nuevo avance:
char * nombre= new char[20]; char * apellido1= new char[20]; char * apellido2= new char[20];
int i;
ifstream leer; leer.open("fichero.txt", ios::in);
if(leer.fail()) cout<<Error al abrir el archivo fichero.txt"; else { while(!leer.eof()) { leer.getline(&nombre [ i ],20,';'); leer.getline(&apellido1 [ i ],20,';'); leer.getline(&apellido2 [ i ],20,'\n'); i++; } leer.close(); }
Cuando visualizo nombre me aparecen las primeras letras de cada nombre, de modo que si en el fichero tengo:
Pepe Juan Lucía
me aparece PJL, cuando visualizo el nombre por ejemplo.
¿Sabrían cuál es el problema? ¿Cómo almaceno el nombre entero de cada fila y no la primera letra de cada uno? Gracias.
|
|
|
|
|
En línea
|
|
|
|
ҒrεακΠιи∂
Desconectado
Mensajes: 184
|
Buenas
Trata usando un char ** y hace las modificaciones necesarias para eso.
Salu2, FreakMind
|
|
|
|
|
En línea
|
Connoisseurs of C semantics find C++ inferior to ++C 
|
|
|
savanibi
Desconectado
Mensajes: 12
|
Gracias FreakMind, usé esto, pero ahora cuando visualizo para leer no me muestra nada, si sólo leo la primera línea bien, pero ya cuando uso el bucle while no me muestra nada, hay algún error?:
char** nombre; char** apellido1; char** apellido2; int maxWords = 10; nombre= new char*[maxWords]; apellido1= new char*[maxWords]; apellido2= new char*[maxWords]; int i; int j=0;
for(i=0; i<maxWords; i++) { numero [ i ]="______________"; nombre [ i ]="______________"; result [ i ]="______________"; }//Esto lo hago porque si no lo inicializo , luego no me lee nada o a trozo solo
ifstream leer; leer.open("fichero.csv", ios::in);
if(leer.fail()) Label1->Caption="Error al abrir el archivo fichero.csv"; else { j=0; while(!leer.eof()) {
leer.getline(nombre [ j ],20,';'); leer.getline(apellido1 [ j ],20,';'); leer.getline(apellido2 [ j ],20,'\n'); j++;
}
|
|
|
|
|
En línea
|
|
|
|
ҒrεακΠιи∂
Desconectado
Mensajes: 184
|
Buenas nombre= new char[maxWords][20]; apellido1= new char[maxWords][20]; apellido2= new char[maxWords][20]; Fijate si con eso te funciona Salu2, FreakMind
|
|
|
|
|
En línea
|
Connoisseurs of C semantics find C++ inferior to ++C 
|
|
|
savanibi
Desconectado
Mensajes: 12
|
Gracias Freak.Me aparece esto:
[C++ Error] Unit1.cpp(163): E2034 Cannot convert 'char ( *)[20]' to 'char * *'
|
|
|
|
|
En línea
|
|
|
|
savanibi
Desconectado
Mensajes: 12
|
Ya lo conseguí. Gracias Freak, como lo de nombre=new char [10][20] que me djiste no me funcionó (creo que no usaría bien la reserva dinámica) lo hice estáticamente como char nombre[10][20] y así funciona.
|
|
|
|
|
En línea
|
|
|
|
|
|