Título: De fichero a Vector Publicado por: chihue en 22 Diciembre 2014, 11:56 am Buenas tengo un vector y su estructura definido:
Código: struct CIF{ y esta es mi funcion para leeerlos y psarlos a vector pero no me lo reconce Código: void FncLeerClientesFich(ifstream &f,VecClientes v, int &tam){ El codigo que tiene que leer tiene esta estructura: Código: 1012 Título: Re: De fichero a Vector Publicado por: Orubatosu en 22 Diciembre 2014, 13:19 pm A menos que no entienda exactamente que pretendes hacer...
Abres el fichero, y lees Código: while (!f.eof()) { Es decir, cuando termines de leer todo el fichero, lo único que tienes en n es la última línea, y nada mas. Título: Re: De fichero a Vector Publicado por: Yoel Alejandro en 22 Diciembre 2014, 15:57 pm Hula chiue. Hay varios aspectos que tratar. En primer lugar, recuerda que la instrucción getline(f,n); lee una línea del fichero y la copia en el string "n", luego es el contenido de este string (y no del fichero "f") el que pasas a los campos de la estructura. Tambiés debes tener en cuenta (o al menos yo no pude dar con una manera más sencilla de hacerlo) que hay campos tipo "int", "char" y "string", por lo que debes hacer la conversión explícita de tipo según el caso:
Código: v[i].identificador = atoi(n.c_str()); etc. Por último y muy importante lo que te recalcó Orubatosu, no puedes leer todo el fichero y luego copiar los valores a la estructura, pues en ese caso estarías pasando sólo los valores de la última línea del fichero. Debes leer línea por línea, y distinguir lo que se debe leer si es la primera línea, la segunda, la tercera, etc. Para ello usamos el operador "%" de resto de la división entera. Analiza la estructura de este fichero con sus números de línea 1. ---| 1012 |--- 2. 24532333 X 3. La taberna vasca 4. Avda. Pio XII 5. taberna.vasca@hotmail.com 6. Valencia 7. ---| 1230 |--- 8. 22345123 P 9. Cafes Valiente 10. Avda. Campanar 11. cafes.valiente@hotmail.com 12. Valencia 13. ---| 1455 |--- 14. 20234561 T 15. Bier Winkeln 16. Avda. Campanar 17. Bier.Winklen@hotmail.com 18. Valencia Aquellas lìneas con los Nros. 1., 7., 13., ..., o sea aquella cuyo resto de dividir por 6 sea 1, corresponden al identificador. Las líneas 2., 8., 14., etc, cuyo resto de dividir por 6 sea 2 corresponden al par "num-letra", y así sucesivamente. Ten en cuenta que esta línea Nro. 2 en particular debe ser dividida en dos sub-strings para extraer el número (tipo num*) y la letra (tipo (char)). Finalmente, no veo definido el tipo de dato "VecClientes", pero supongo que es un arreglo de struct cliente. Aquí el código de mi propuesta: Código
y aquì puedes ver la salida del programa, donde le hice imprimir lo que ha leido del archivo: Código: 1012 Por cierto, el fichero "datos1.txt" contiene la información que dices, de donde tomar los datos. Enjoy it !!! |