Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 ·...

14
Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria. Es decir, puedo leer el primer elemento del archivo y posteriormente el 5º elemento o el ultimo elemento del archivo Esta forma de acceso se logra porque se guarda la información en bloques, por lo cual puedo acceder a cualquiera de los bloques que he almacenado. Para realizar estas acciones haremos uso de las funciones fwrite, fread, ftell, sizeof, fseek,rewind

Transcript of Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 ·...

Page 1: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

Archivos de Acceso Aleatorio� Los archivos binarios pueden accederse de forma

aleatoria. Es decir, puedo leer el primer elemento del archivo y posteriormente el 5º elemento o el ultimo elemento del archivo

� Esta forma de acceso se logra porque se guarda la información en bloques, por lo cual puedo acceder a cualquiera de los bloques que he almacenado.

� Para realizar estas acciones haremos uso de las funciones fwrite, fread, ftell, sizeof, fseek,rewind

Page 2: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

fwrite� La función fwrite escribe un bloque de memoria al

archivo. Su sintaxis es la siguiente

fwrite(apunt_Ele, Tamaño_Ele, No_Elementos, apuntador_archivo)

� Ejemplo:#include <stdio.h>int main () { FILE * pFile; char buffer[] = { 'x' , 'y' , 'z' }; pFile = fopen( "myfile.bin" , "wb" ); fwrite(buffer, sizeof(char), sizeof(buffer), pFile );fclose(pFile); return 0; }

Page 3: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

fread(ptr,tam,NoEle,archivo)� La función fread lee un bloque de memoria y lo almacena

en el aputador ptr. El bloque de memoria que lee del archivo contiene el numero de elementos especificado en NoEle, cada elemento es de tamaño tam.NoEle, cada elemento es de tamaño tam.

� Ejemplo:

#include <stdio.h>int main () { FILE * pFile; char buffer[3]; pFile = fopen( "myfile.bin" , “rb" ); fread(buffer, sizeof(char), 3*sizeof(char), pFile );fclose(pFile); return 0; }

Page 4: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

ftell(archivo)� ftell regresa el tamaño en bytes de un archivo. Se usa en

conjunto con fread para leer datos del archivo

fseek(ptrfile,offset,origen)

� Posición el apuntador al archivo ptrfile a la posición indicada por el origen+offset.

� Los valores preestablecidos para el origen son:� SEEK_SET Inicio del archivo

� SEEK_CUR Posición actual del archivo

� SEEK_END Fin del archivo

fseek(ptrfile,offset,origen)

Page 5: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

Ejemplo, ftell fseek#include <stdio.h>

int main(){

FILE * pFile; long size;

pFile = fopen ("myfile.txt","rb"); if (pFile==NULL) printf("El archivo no se puede abri r\n"); else {

fseek (pFile, 0, SEEK_END);size=ftell (pFile); fclose (pFile); printf ("Size of myfile.txt: %ld bytes.\n",size);}

return 0; }

Page 6: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

rewind(ptrfile)� La función rewind regresa el apuntador al archivo

ptrfile al inicio del archivo

� Una llamada a rewind es equivalente a:

� fseek(ptrfile, 0, SEEK_SET);� fseek(ptrfile, 0, SEEK_SET);

else { fseek (pFile, 0, SEEK_END);size=ftell (pFile);rewind(pFile);buffer = (char *)malloc(size*sizeof(char));fread(buffer,sizeof(char),size*sizeof(char),pFile) fclose (pFile); }

Page 7: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

Ejemplo 1� Escriba un programa que almacene la información de

los alumnos en un archivo

� Cada registro contiene la siguiente información

� matricula� matricula

� Nombre

� Carrera en la que esta inscrito

� Promedio del alumno

� El programa deberá leer la información hasta que se le indique fin de captura.

Page 8: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

función escribevoid escribe(FILE * ar){

alumno a;int op;

printf("Proporcione los siguientes datos\n");do{do{

printf("Matricula: ");scanf("%d",&a.matricula);fflu sh(stdin);printf("Nombre: ");gets(a.nombre);printf("Carrera: ");gets(a.carrera);printf("Promedio: ");scanf("%f",&a.promedio);fflus h(stdin);fwrite(&a,sizeof(alumno),1,ar);printf("Desea ingresar mas datos (1-si, 0-No)");scanf("%d",&op);}while(op);

}

Page 9: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

MAIN

#include <stdio.h>#include <stdlib.h>

typedef struct{int matricula;char nombre[20];char carrera[20];float promedio;} alumno;

void escribe(FILE * ar);

int main(){{

FILE *archivo;

archivo=fopen("datos.bin","w");if(archivo != NULL)

escribe(archivo);else

printf("El archivo no se puede abrir\n");system("pause");fclose(archivo);return 0;

}

Page 10: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

Ejemplo 2� Lee un conjunto archivo que contenga los datos de los

alumnos.

� Cada registro contiene los siguientes datos

� matricula� matricula

� Nombre

� Carrera en la que esta inscrito

� Promedio del alumno

� Despliega los datos de un alumno en particular. La búsqueda será realizada por medio de la matricula del alumno

Page 11: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

busquedavoid busqueda(FILE * ar, int mat){

alumno a;int encontrado = 0;

do{fread (& a,sizeof (alumno),1,ar);if (a.matricula == mat)

{printf("Matricula: %d\n",a.matricula);printf("Nombre: %s\n",a.nombre);printf("Carrera: %s\n",a.carrera);printf("Promedio: %2.2f\n",a.promedio);encontrado = 1;}

}while((!encontrado) && (!feof(ar)));printf("El alumno no se encuentra registrado");

}

Page 12: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

lecturavoid lectura(FILE * ar){

alumno a;

while (! feof ( ar ))while (! feof ( ar )){

fread(&a,sizeof(alumno),1,ar);printf("Matricula: %d\n",a.matricula);printf("Nombre: %s\n",a.nombre);printf("Carrera: %s\n",a.carrera);printf("Promedio: %2.2f\n",a.promedio);}

}

Page 13: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

Mainint main(){

FILE *archivo;int mat;

archivo=fopen("datos.bin","r");if (archivo != NULL)

{lectura(archivo);rewind(archivo);printf("Proporciona la matricula del alumno: ");scanf("%d",&mat);busqueda(archivo,mat);}

elseprintf("El archivo no se puede abrir\n");

system("pause");fclose(archivo);return 0;

}

Page 14: Archivos de Acceso Aleatoriogalia.fc.uaslp.mx/~rmariela/programacion/unidad62.pdf · 2012-02-25 · Archivos de Acceso Aleatorio Los archivos binarios pueden accederse de forma aleatoria.

Proyecto Final� 1ª revisión 7 de Mayo

� 2ª revisión 21 de Mayo

� Fecha de entrega 31 de Mayo

� Temas:� Sistema de reporte de datos del mundial 2010

� Base de datos de un hospital

� Juego del gato

� Conecta 4

� Graficas de funciones