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

Pablo Brunet cirujatuc79 en gmail.com
Mar Mar 24 06:39:44 CET 2009


Solo decirles que aprobe!!!! en la facultad!! gracias a la lista!!!

El 20 de marzo de 2009 20:45, Pablo Brunet <cirujatuc79 en gmail.com> escribió:

> 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/20090324/bda4bec4/attachment.html>


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