[C con Clase] Pasar datos de un archivo a un vector

Steven Davidson srd4121 en njit.edu
Vie Mar 20 03:56:18 CET 2009


Hola Pablo,

Pablo Brunet wrote:
> sigo con problemas :(, ahora no me muestra nada, solo presione una
> tecla para continuar..., el archivo posee 2 registros en este orden:
> 
> TUCUMAN    JUAN    31
> SALTA       PABLO    29  
> 
> # include <stdio.h>
> # include <stdlib.h>
> # include <iostream>
> 
> using namespace std;
> 
> 
> typedef struct p {
>        char nombre[20];
>        int edad;
>        char provincia[30];};
>         
> FILE * m;        
> int i=0;
> p v[100];
> 
> int main()
> {
>  m=fopen("pablo.txt","rb");

Esto es un problema, porque indicas que el fichero está en modo binario, 
cuando se trata de un fichero en modo texto. Elimina la letra 'b' de la 
segunda cadena.

>  fseek(m,0,0);
>  fread(&v,sizeof(v),1,m);

Como cada registro tiene diferentes tipos: cadenas y enteros, entonces 
no deberías leer toda la información de golpe. Tienes que procesar cada 
línea de texto en el fichero. En la práctica, usa 'fscanf()'. 
Básicamente, estás leyendo y convirtiendo, si hace falta, las cadenas de 
caracteres al tipo que quieres. Esto es prácticamente leer la 
información desde el teclado con 'scanf()', pero en su lugar lo hacemos 
desde un fichero.

Nota: La verdad es que la implementación de 'scanf()' invoca 'fscanf()'.

>  i=1;
>  while (!feof(m)){
>        cout<<endl<<"  "<<v[i].provincia<<"  "<<v[i].nombre<<" 
>  "<<v[i].edad<<endl; 
>        fread(&v[i],sizeof(v[1]),1,m);

Aquí haríamos lo mismo.

>        i++;}
>  fclose(m);
> 
>  system("PAUSE");
> }
>  


Espero que esto te ayude

Steven






Más información sobre la lista de distribución Cconclase