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

Salvador Pozo salvapozo en gmail.com
Vie Mar 20 11:53:41 CET 2009


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




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