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

Pablo Brunet cirujatuc79 en gmail.com
Sab Mar 21 00:45:46 CET 2009


bueno luego de una buena comprensión de la función fread, modifique mi
algoritmo y obtuve los resultados que quise.
# 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","r");
fseek(m,0,0);
fread(&v[i],sizeof(p),1,m);
 while (!feof(m)){
       cout<<v[i].provincia<<"  "<<v[i].nombre<<"  "<<v[i].edad<<endl;
       i++;
       fread(&v[i],sizeof(p),1,m);
       }
 fclose(m);

 system("PAUSE");
}

muchas gracias a todos! por vuestra predisposición y paciencia con este
novato. ahora me dedico a listas y su implementacion.

El 20 de marzo de 2009 7:53, Salvador Pozo <salvapozo en gmail.com> escribió:

> Hola:
>
> 2009/3/20 Pablo Brunet <cirujatuc79 en gmail.com>:
> > evidentemente no me queda claro el funcionamiento del fread y el de
> > sus parámetros, que significa exactamente sus parametros?.
>
> En la página hay al menos dos sitios donde se explica el uso de las
> funciones para lectura y escritura en ficheros:
>
> http://c.conclase.net/ficheros/index.php?cap=002#FIC_FUNCC
> http://c.conclase.net/librerias/funcion.php?fun=fread
>
> La función fread tiene el siguiente prototipo:
>
> size_t fread(void *puntero, size_t tamanyo, size_t nmemb, FILE *stream);
>
> El primer parámetro es un puntero genérico que debe apuntar a la zona
> de memoria que recibirá el resultado de la lectura. Esta zona de
> memoria debe ser lo suficientemente grande para contener el bloque de
> datos que se va a leer desde el fichero.
>
> El segundo parámetro es el tamaño de cada elemento que se va a leer.
> Para comprender esto hay que tener en cuenta el tercer parámetro y que
> fread está diseñada para leer arrays.
>
> El tercer parámetro indica el número de elementos a leer.
>
> Por ejemplo, si vamos a leer elementos de un array de estructuras del tipo:
> struct elemento {
>    char nombre[32];
>    int edad;
>    float altura;
> };
>
> Concretamente, queremos leer 23 elementos de este tipo.
>
> Primero, necesitamos un array para contener los valores leídos:
>
> struct elemento tabla[23];
> FILE *fentrada;
>
> Suponiendo que el fichero se llame "datos.dat", podemos invocar a fread
> así:
>
> fentrada = fopen("datos.dat", "rb");
> fread(tabla, sizeof(struct elemento), 23, fentrada);
>
> Es decir, vamo a leer desde el fichero "datos.dat" 23 elementos de
> tamaño sizeof(struct elemento) y a almacenar los datos leídos a partir
> de la dirección de memoria tabla, o lo que es lo mismo &tabla[0].
>
> Como norma general, fread está pensada para leer datos binarios, no
> cadenas ni archivos de texto delimitados ni tabulados. Es decir,
> ficheros creados usando la función fwrite. Por eso el fichero lo hemos
> habierto como "rb".
>
> El cuarto parámetro es un manipulador de fichero.
>
> El valor de retorno es el número de elementos leídos. En nuestro
> ejemplo, si el fichero sólo contiene 12 datos, el valor de retorno
> será 12, a pesar de que le hemos indicado que lea 23.
>
> Por contra, si vamos a utilizar un fichero de texto, que se pueda
> editar con un editor de textos, no nos sirven las funciones fread y
> fwrite, y tendremos que usar fscanf y fprintf. Esta es la opción
> preferida por muchos programadores, ya que es independiente de la
> plataforma, y por lo tanto, más estándar y compatible.
>
> Sin embargo, los ficheros binarios son más compactos y rápidos de leer
> y escribir.
>
> Hasta pronto.
>
>
> --
> Salvador Pozo Coronado
> http://www.conclase.net
> mailto:salvapozo en gmail.com
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090320/c85a3f4f/attachment.html>


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