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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  De fichero a Vector
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: De fichero a Vector  (Leído 2,546 veces)
chihue

Desconectado Desconectado

Mensajes: 5


Ver Perfil
De fichero a Vector
« en: 22 Diciembre 2014, 11:56 am »

Buenas tengo un vector y su estructura definido:

Código:
struct CIF{
int num;
char letra;
};

struct cliente{
int identificador;
CIF c;
string nombre;
string direccion;
string correo;
string ciudad;
};

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){
    int i = 0;
    string n;
int l = 0;
    while (!f.eof()) {
    getline(f,n);
        l++;
    }
    tam = l / 6;
    for (i=0; i<tam; i++){
    f >> v[i].identificador;
    f >> v[i].c.num >> v[i].c.letra;
    f >> v[i].nombre;
    f >> v[i].direccion;
    f >> v[i].correo;
    f >> v[i].ciudad;
}
}

El codigo que tiene que leer tiene esta estructura:
Código:
1012
24532333 X
La taberna vasca
Avda. Pio XII
taberna.vasca@hotmail.com
Valencia
1230
22345123 P
Cafes Valiente
Avda. Campanar
cafes.valiente@hotmail.com
Valencia
1455
20234561 T
Bier Winkeln
Avda. Campanar
Bier.Winklen@hotmail.com
Valencia
1875
12356355 R
Tapioca. Comidad para llevar.
Avda. Tres Forques
Tapioca@hotmail.com
Valencia


En línea

Orubatosu


Desconectado Desconectado

Mensajes: 2.515


Ver Perfil WWW
Re: De fichero a Vector
« Respuesta #1 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()) {
     getline(f,n);
        l++;
    }

Es decir, cuando termines de leer todo el fichero, lo único que tienes en n es la última línea, y nada mas.


En línea

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

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: De fichero a Vector
« Respuesta #2 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());
...
v[i].nombre = n;
...
v[i].direccion = n;

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
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. struct CIF {
  9.   int num;
  10.   char letra;
  11. };
  12.  
  13. struct cliente {
  14.   int identificador;
  15.   CIF c;
  16.   string nombre;
  17.   string direccion;
  18.   string correo;
  19.   string ciudad;
  20. };
  21. typedef struct cliente * VecClientes;   /* <--- Yo puse esto */
  22.  
  23. void FncLeerClientesFich(ifstream &f,VecClientes v, int &tam);
  24.  
  25.  
  26. int main ()
  27. {
  28.   string cadena;
  29.   ifstream f("datos1.txt");
  30.   struct cliente v[100];
  31.   int tam;
  32.  
  33.   FncLeerClientesFich(f, v, tam);
  34.  
  35.   /* En este codigo de prueba vamos a imprimir los datos
  36.     * que ha cargado del archivo
  37.     */
  38.   for ( int i = 0; i < tam; i++ ) {
  39.      cout << v[i].identificador << endl;
  40.      cout << v[i].c.num << " | " << v[i].c.letra << endl;
  41.      cout << v[i].nombre << endl;
  42.      cout << v[i].direccion << endl;
  43.      cout << v[i].correo << endl;
  44.      cout << v[i].ciudad << endl;
  45.      cout << "------------------------" << endl;
  46.   }
  47.  
  48.   f.close();
  49.  
  50.   return 0;
  51. }
  52.  
  53. void FncLeerClientesFich(ifstream &f,VecClientes v, int &tam) {
  54.  
  55.   int i = 0;
  56.   string n;
  57.   string n1, n2; /* <-- esto es nuevo */
  58.   int l = 0;
  59.   while (!f.eof()) {
  60.      getline(f,n);
  61.      l++;
  62.  
  63.      /* 1ra linea */
  64.      if ( l%6 == 1 )
  65.         v[i].identificador = atoi(n.c_str());
  66.      /* 2da linea */
  67.      if ( l%6 == 2 ) {
  68.         /* aqui dividimos el string en dos partes, por la cadena
  69.           * separadora " "
  70.           */
  71.         size_t ind = n.find(" ");
  72.         n1 = n.substr(0, ind);
  73.         n2 = n.substr(ind + 1, n.length());
  74.         v[i].c.num = atoi( n1.c_str() );
  75.         v[i].c.letra = n2[0];
  76.      }
  77.      /* 3ra linea */
  78.      if ( l%6 == 3 )
  79.         v[i].nombre = n;
  80.      /* 4ta linea */
  81.      if ( l%6 == 4 )
  82.         v[i].direccion = n;
  83.      /* 5ta linea */
  84.      if ( l%6 == 5 )
  85.         v[i].correo = n;
  86.      /* 6ta linea */
  87.      if ( l%6 == 0 ) {
  88.         v[i].ciudad = n;
  89.  
  90.         /* incrementa campo cada 6 lineas leidas del fichero */
  91.         i++;
  92.      }
  93.   }
  94.   tam = i;
  95.  
  96.   return;
  97. }
  98.  

y aquì puedes ver la salida del programa, donde le hice imprimir lo que ha leido del archivo:

Código:
1012
24532333 | X
La taberna vasca
Avda. Pio XII
taberna.vasca@hotmail.com
Valencia
------------------------
1230
22345123 | P
Cafes Valiente
Avda. Campanar
cafes.valiente@hotmail.com
Valencia
------------------------
1455
20234561 | T
Bier Winkeln
Avda. Campanar
Bier.Winklen@hotmail.com
Valencia
------------------------
1875
12356355 | R
Tapioca. Comidad para llevar.
Avda. Tres Forques
Tapioca@hotmail.com
Valencia

Por cierto, el fichero "datos1.txt" contiene la información que dices, de donde tomar los datos.

Enjoy it !!!
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
vector < vector<int> > ?
Programación C/C++
bemone 3 2,739 Último mensaje 24 Agosto 2012, 05:50 am
por BlackZeroX
Vector i*8+j
Programación C/C++
JohnMcb 1 1,773 Último mensaje 3 Mayo 2013, 17:56 pm
por rir3760
No consigo pasar fichero .txt a vector tipo int
Java
thehiphapper 3 2,888 Último mensaje 15 Agosto 2013, 17:19 pm
por 1mpuls0
Recorrer un fichero y meterlo en un vector/Matriz/etc
Programación C/C++
TheShocker 0 1,567 Último mensaje 21 Junio 2015, 16:34 pm
por TheShocker
Copiar fichero a vector strings
Programación C/C++
ElFontaneroGRNA 5 4,124 Último mensaje 16 Enero 2017, 08:36 am
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines