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

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

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

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