6
Laboratorio de Programación I Página 120 Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión N° 22 UNIVERSIDAD CATÓLICA DE SANTA MARÍA PROGRAMA PROFESIONAL DE INGENIERÍA DE SISTEMAS SESIÓN 22: Ficheros de Acceso Aleatorio I en C/C++ I OBJETIVOS Comprender los conceptos de operaciones básicas sobre archivos de acceso directo o aleatorio. Aplicar las operaciones básicas sobre archivos de acceso directo para la gestión de registros. Valorar las ventajas y recursos que proporcionan las funciones para operación sobre archivos de acceso directo. II TEMAS A TRATAR Introducción. Archivos de acceso directo Operaciones con archivos acceso directo. Resumen. III MARCO TEORICO 1. INTRODUCCIÓN Se dice que un archivo es de acceso u organización directa cuando para acceder a un registro n cualquiera no se tiene que pasar por los n-1 registros anteriores. Como se observa de esta definición los archivos directos tienen una gran ventaja( son mucho mas rápidos) cuando se comparan con los archivos de acceso u organización secuencial estudiados en la unidad anterior. Aunque lo anterior no quiere decir que son mejores que los secuenciales, es decir es el propio problema planteado quien exigirá una solución u otra, por ejemplo si se quiere construir un archivo para almacenar los datos de un guestbook, si se construye de manera directa seria muy rápido pero si lo construimos de manera secuencial, se podrán almacenar datos con cantidades de información mas adecuados al problema. Es decir un archivo de acceso directo tiene que tener sus registros o renglones de un tamaño fijo o predeterminado de antemano. 2. ARCHIVOS DE ACCESO DIRECTO Un archivo de acceso directo permite posicionar el apuntador de interno de registros, a cualquier registro determinado sin necesidad de pasar por todos los registros anteriores, usando las siguientes funciones.

Guia de Practicas de Programacion I - Sesion 22 - 2012

Embed Size (px)

DESCRIPTION

PROGRAMACION

Citation preview

Page 1: Guia de Practicas de Programacion I - Sesion 22 - 2012

Laboratorio de Programación I Página 120

Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión N° 22

UNIVERSIDAD CATÓLICA DE SANTA MARÍA PROGRAMA PROFESIONAL DE INGENIERÍA DE SISTEMAS

SESIÓN N° 22:

Ficheros de Acceso Aleatorio I en C/C++

I

OBJETIVOS

Comprender los conceptos de operaciones básicas sobre archivos de acceso directo o aleatorio.

Aplicar las operaciones básicas sobre archivos de acceso directo para la gestión de registros.

Valorar las ventajas y recursos que proporcionan las funciones para operación sobre archivos de acceso directo.

II

TEMAS A TRATAR

Introducción. Archivos de acceso directo Operaciones con archivos acceso directo. Resumen.

III

MARCO TEORICO

1. INTRODUCCIÓN

Se dice que un archivo es de acceso u organización directa cuando para acceder a un registro n cualquiera no se tiene que pasar por los n-1 registros anteriores.

Como se observa de esta definición los archivos directos tienen una gran ventaja( son mucho mas rápidos) cuando se comparan con los archivos de acceso u organización secuencial estudiados en la unidad anterior.

Aunque lo anterior no quiere decir que son mejores que los secuenciales, es decir es el propio problema planteado quien exigirá una solución u otra, por ejemplo si se quiere construir un archivo para almacenar los datos de un guestbook, si se construye de manera directa seria muy rápido pero si lo construimos de manera secuencial, se podrán almacenar datos con cantidades de información mas adecuados al problema.

Es decir un archivo de acceso directo tiene que tener sus registros o renglones de un tamaño fijo o predeterminado de antemano.

2. ARCHIVOS DE ACCESO DIRECTO

Un archivo de acceso directo permite posicionar el apuntador de interno de registros, a cualquier registro determinado sin necesidad de pasar por todos los registros anteriores, usando las siguientes funciones.

Page 2: Guia de Practicas de Programacion I - Sesion 22 - 2012

Laboratorio de Programación I Página 121

Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión N° 22

int fseek(apuntador,long offset,origen);

Esta función posiciona el apuntador de registro en el byte indicado. Regresa 0 si se pudo posicionar.

apuntador=fopen("a:archivo.dat","r+"); fseek(apuntador,(long)(clave)*(sizeof(registro)),0);

0 ---> SEEK_SET principio del archivo. 1 ---> SEEK_CUR posicion actual. 2 ---> SEEK_END fin del archivo.

long ftell(apuntador);

Regresa un valor long indicando la posición actual del cursor interno de registros de archivo.

int rewind(apuntador);

Regresa el apuntador al principio del archivo.

Ejemplo para hacer modificaciones.

fseek(apuntador,(long)(clave)*(sizeof(registro)),0); fread(&registro,sizeof(registro),1,apuntador); hacer las modificaciones.

rewind(apuntador); fseek(apuntador,(long)(clave)*(sizeof(registro)),0); fwrite(&registro,sizeof(registro),1,apuntador);

3. OPERACIONES CON ARCHIVOS DE ACCESO DIRECTO

Las principales operaciones en la gestión de archivos de acceso directo son:

A. CREACION ARCHIVOS DIRECTOS

En este proceso se pretende solamente crear un archivo directo en disco.

#include <iostream>

using namespace std;

#include <stdio.h>

#include <conio.h>

#include <string.h>

struct

{

int clave;

char nombre[30];

int edad;

} animalito;

int main()

{

system("cls");

//creando y cerrando el archivo en disco

FILE *archdisco;

archdisco = fopen("c:\\ac\\archivo1.dat","wb");

Page 3: Guia de Practicas de Programacion I - Sesion 22 - 2012

Laboratorio de Programación I Página 122

Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión N° 22

fclose(archdisco);

printf("ARCHIVO CREADO");

system("pause");

return 0;

}

Recordar que la estructura que se uso para crear el archivo se deberá usar siempre y con el mismo orden cuando se acceda al archivo con los procesos u operaciones anteriormente mencionados.

Observar que es completamente similar a la creación de archivos secuenciales.

Lo primero que se crea es una variable de tipo puntero o apuntador a un archivo a disco(instrucción FILE y debe ser en MAYÚSCULAS) llamada archdisco(muy original).

Variables apuntadores son tipos especiales de variables que tienen la capacidad de almacenar no datos, pero si direcciones ya sean de la memoria del computador o como en este caso de una dirección física del disco. En Lenguaje C una variable apuntador se declara anteponiendo un asterisco antes del nombre.

En el programa se está creando una variable apuntador bautizada con el nombre de archdisco que almacenara la dirección física de el archivo en disco, en algún cilindro, track, sector.

Como segundo paso se abre el archivo con la instrucción fopen():

archdisco = fopen("c:\\ac\\archivo1.dat","wb");

Observar que el path es la dirección física de tu PC.

Recordar también que archivos y directorios ms-dos deben respetar 8.3 letras.

Observar el doble diagonal(\\) en el parámetro.

La función fopen() cuando realiza el trabajo de abrir un archivo, regresa la dirección física donde crea o graba el archivo en disco.

El primer parámetro o argumento en esta función es la unidad de disco y el nombre del archivo.

El segundo parámetro o argumento es llamado modo y es una de los varios modos que podemos usar.

"r" -> Lectura. "w" -> Escritura. "a" -> Append, si el archivo ya existe append empieza a añadir los nuevos

datos al final del archivo ya existente. "r+" -> Lectura y escritura, ya debe existir el archivo. "w+" -> Crea para lectura y escritura y si ya existe, sobreescribe.

"a+" -> Crea o abre para lectura y append, sino existe el archivo será creado.

En adición a los valores listados también es permitido agregar uno de los siguientes caracteres, pero insertándolo antes del signo + modo significado.

t lo abre en modo texto.

b lo abre en modo binario.

Cuando se ha finalizado de escribir al archivo se debe cerrar y esto se hace con la instrucción:

fclose(archdisco);

Page 4: Guia de Practicas de Programacion I - Sesion 22 - 2012

Laboratorio de Programación I Página 123

Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión N° 22

B. GRABACION Y LECTURA EN DISCO

Como ya se menciono grabar y lectura de registros o estructuras a renglones o registros de archivos en disco.

Estos dos procesos son los casos mas comunes y frecuentes que se pueden realizar con un archivo de disco.

#include <iostream>

using namespace std;

#include <stdio.h>

#include <conio.h>

#include <string.h>

struct

{

int clave;

char nombre[30];

int edad;

} animalito;

int main()

{

system("cls");

// captura de campos

printf("dame clave :");

scanf("%d",&animalito.clave);

system("pause");

printf("dame nombre :");

gets(animalito.nombre);

printf("dame edad :");

scanf("%d",&animalito.edad);

// grabando a disco

FILE *archdisco;

archdisco = fopen("c:\\ac\\archivo1.dat","ab+");

fwrite(&animalito,sizeof(animalito),1,archdisco);

fclose(archdisco);

//avisando usuario

printf("animalito insertado");

system("pause");

return 0;

}

Observar que es completamente similar al programa de archivos secuenciales, solo se recomienda y exige que las claves sigan la secuencia 0,1,2,3,4,5.....

Otra observación es que se esta usando el "fopen()" en modo "ab+" en lugar de modo "w" pero es para matar dos pájaros de un tiro, reestudiar la clase de modos de apertura.

La instrucción de grabación es:

fwrite(&animalito,sizeof(animalito),1,archdisco);

Que ya se estudio anteriormente. Para leer registros del archivo podemos usar el proceso siguiente:

#include <iostream>

using namespace std;

#include <stdio.h>

#include <conio.h>

#include <string.h>

struct

Page 5: Guia de Practicas de Programacion I - Sesion 22 - 2012

Laboratorio de Programación I Página 124

Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión N° 22

{

int clave;

char nombre[30];

int edad;

} animalito;

int main()

{

system("cls");

// leyendo disco

FILE *archdisco;

archdisco = fopen("c:\\ac\\archivo1.dat","rb+");

// aqui siempre debe empezar el ciclo de lectura

// y fread() regresa siempre cuantas estructuras leyo

while(fread(&animalito,sizeof(animalito),1,archdisco)==1)

{

// desplegando estructuras

printf("%d ",animalito.clave);

printf("%s ",animalito.nombre);

printf("%d ",animalito.edad);

printf("\n");

}; // aqui termina while

// no olvidar cerrar archivo y siempre fuera de while

fclose(archdisco);

system("pause");

return 0;

}

Seria bueno que el despliegue fuese en una tabla pero esto queda de tarea.

4. RESUMEN

Los archivos de acceso directo tiene como los de acceso secuencial las mismas operaciones básicas, pero la diferencia es la capacidad que poseen estos archivos de saltar al registro respectivo para hacer sus operaciones, esto hace que el tipo de gestión sea mucho más rápido a la hora de hacer el procesamiento, para ello posee un mecanismo que nos permite apuntar al registro deseado.

IV

(La práctica tiene una duración de 2 horas) ACTIVIDADES

1. Encender el equipo de cómputo, si existe algún desperfecto o faltante en el equipo comunicarlo inmediatamente.

2. Al aparecer la solicitud de contraseña hacer clic en el botón Cancelar o ingresar el nombre de cuenta(login) y contraseña(password) que especifique el Docente. Esperar que aparezca el mensaje de Inicio de sesión.

3. Crear una carpeta que se llame Programación I y dentro de ella una que se llame Práctica Nº 22 dentro de la carpeta Mis Documentos.

4. Ejecute el Visual Studio 2010, crear un nuevo proyecto CRL, para esto elegir en la pestaña Archivo y aquí elegir la opción más adecuada.

5. Nombrar los archivos como se indica en el archivo Actividades N° 22 que se adjunta y asegurarse de almacenarlos en la carpeta Práctica Nº 22 al momento de crearlos.

6. Realizar las acciones indicadas en el archivo adjunto. 7. Al finalizar la práctica de be guardar todos sus archivos, ya sea en su memoria USB o por

correo electrónico y luego eliminar los archivos del equipo y vaciar la papelera de reciclaje.

V

EJERCICIOS

1. Diseñar y codificar un programa que cree archivos de acceso directo en sus diferentes formas.

Page 6: Guia de Practicas de Programacion I - Sesion 22 - 2012

Laboratorio de Programación I Página 125

Mgter. Ángel Montesinos Murillo, Mgter. Manuel Zúñiga Carnero Sesión N° 22

2. Diseñe y codifique un programa que nos permita leer y escribir registros de forma directa sobre un archivo de acceso directo en sus diferentes formas.

3. Crear archivos directos de alumnos, proveedores, libros, productos, películas.

VI

CUESTIONARIO

1. ¿Qué es un archivo de acceso directo o aleatorio? 2. ¿Qué es un campo clave? 3. ¿Cuáles son las operaciones básicas que se pueden ejecutar sobre un archivo de acceso

directo? 4. ¿De cuántas formas se puede crear un archivo de acceso directo? 5. ¿De cuántas formas se puede abrir un archivo de acceso directo? 6. ¿Cómo se leen registros en un archivo de acceso aleatorio? 7. ¿Qué diferencia existe entre la lectura secuencial y la directa de registros? 8. ¿Cómo se graban registros en archivos de acceso directo? 9. ¿Qué diferencia existe entre la escritura de registros secuencial y directa? 10. ¿Cómo se usa la forma append de creación o apertura de archivos de acceso directo?

VII

BIBLIOGRAFIA Y REFERENCIAS

Deitel, Paul J., Deitel, Harvey M., "Cómo Programar en C++", 6ta Edición, Ed. Pearson Educación, México 2009.

Ceballos Sierra, Francisco J., "Curso de Programación C++. Programación Orientada a Objetos"; MADRID, RA-MA, 1991.

Kernighan, Brian W., Ritchie, Dennis M., "El Lenguaje de Programación C", 2da Edición, Ed. Prentice Hispanoamérica S. A., México 1991.