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

vicente lozano vicentelozano en gmail.com
Mar Mar 24 09:48:59 CET 2009


Enhorabuena! Ahora ya sabes a seguir programando que luego si no se olvida
XD

2009/3/24 Pablo Brunet <cirujatuc79 en gmail.com>

> 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
>>>
>>
>>
>
> _______________________________________________
> 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/ee7c7a82/attachment.html>


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