Archivos Aleatorios

¿Qué son Archivos?

Los archivos también denominados ficheros (file); son una colección de información (datos relacionados entre sí), localizada o almacenada como una unidad en alguna parte de la computadora.

Los archivos son el conjunto organizado de informaciones del mismo tipo, que pueden utilizarse en un mismo tratamiento; como soporte material de estas informaciones

Archivos Aleatorios

Es aquel en donde los datos se guardan en registros mediante una estructura definida de tipo Type (estructura definida por nosotros) también llamada UDT. Estos permiten acceder a cualquier parte del fichero en cualquier momento, como si fueran arrays en memoria. Las operaciones de lectura y/o escritura pueden hacerse en cualquier punto del archivo. En general se suelen establecer ciertas normas para la creación, aunque no todas son obligatorias:                        

• Abrir el archivo en un modo que te permita leer y escribir. Esto no es imprescindible, es posible usar archivos de acceso aleatorio sólo de lectura o de escritura.

• Abrirlo en modo binario, ya que algunos o todos los campos de la estructura pueden no ser caracteres.

• Usar funciones como fread y fwrite, que permiten leer y escribir registros de longitud constante desde y hacia un fichero.

• Usar la función fseek para situar el puntero de lectura/escritura en el lugar apropiado de tu archivo.

Los Archivos Aleatorios a diferencia de los archivos secuenciales, los archivos aleatorios almacenan datos en forma de registros, para leer datos de un archivo secuencial había que leer todo el archivo, es decir que no podíamos leer por ejemplo los datos que estuviesen en la línea 35 del mismo sin antes pasar por todos los datos anteriores, por eso su nombre de archivo secuencial.

En cambio los archivos aleatorios, también llamados archivos directos, almacenan los datos con una estructura diferente. Los datos se guardan en registros mediante una estructura definida de tipo Type (estructura definida por nosotros) también llamada UDT.

Por ejemplo si tuviésemos 25 registros, cada uno con datos (apellido, e-mail, teléfono, etc.), y quisiera acceder al registro 17, puedo leer los datos del registro 17 sin tener que leer los 16 registros anteriores, ganando con ello más velocidad y teniendo una estructura de datos definida.


Declaración de un archivo

Para declarar un archivo de acceso directo se realiza con las palabras reservadas FILE OF, su sintaxis es la siguiente:

Esta declaración se realiza en la sección correspondiente a la declaración de las variables.

Ejemplo:

Normalmente no se desea crear archivos que puedan almacenar un solo tipo de datos ya que se requerirían varios archivos, por ejemplo para alguna base de datos: uno para losnombres, otro para apellidos, otro para la edad, etc. Para evitar este inconveniente es posible usar registros del tipo RECORD, que permiten grabar en un solo registro un grupo de datos que pueden ser de diferentes tipos, uno de tipo INTEGER, uno de tipo STRING, etc.

Los registros del tipo record deben ser declarados antes de las variables en una sección llamada TYPE con el siguiente formato:

La sección TYPE se escribe antes de la declaración de las variables. Como ejemplo, si se quiere crear un archivo el que se guarden el nombre, domicilio, edad y estado civil de un grupo de personas, el primer paso a realizar es crear un registro que contenga todos estos campos:

El siguiente paso es declarar un archivo del tipo Datos así como una variable del mismo tipo de los que se utilizarán en el archivo:

Aún cuando se tenga declarado el archivo no es posible grabar nada en él si no se le asigna un nombre real para guardarlo en el disco. El proceso de dicha asignación es el mismo que para los archivos de texto:

Nombre.txt puede ser una constante, una variable o estar escrita directamente en el programa. Naturalmente debe cumplir con todas las reglas para nombrar un archivo.

Una vez declarado un archivo ya es posible abrirlo. En caso de querer abrir un archivo nuevo se utiliza la instrucción Rewrite, o si el archivo ya existe en el disco se abre con el procedimiento Reset. No existe ninguna diferencia entre la apertura de un archivo de acceso directo para su lectura o para su escritura.

Si al utilizar el procedimiento Rewrite el archivo asignado ya existía se eliminará del disco y se creará uno nuevo, por lo mismo se debe tener cuidado al momento de abrir estos archivos.

Cada uno de los registros de un archivo esta referenciado por un número específico comenzando desde el registro 0 y aumentando de 1 en 1. La función FilePos devuelve el número de registro actual, su sintaxis es:

Variable Archivo es la variable a la cual se asignó un nombre de archivo en el disco. Para moverse a un registro determinado se utiliza la función Seek, con la siguiente sintaxis:

Para moverse al final del archivo para agregar un nuevo registro se utiliza este mismo comando con el parámetro NumRegistro como sigue:

Cuando se avanza en un archivo registro por registro se utiliza la función EOF para determinar si ya se llegó al final del archivo.

Para la lectura y escritura en un archivo de acceso directo únicamente se utilizan los procedimientos Read Write. Después de cada operación de lectura o escritura el puntero se posiciona en el siguiente registro.

Para cerrar los archivos abiertos se procede igual que en uno de acceso secuencial, utilizando el procedimiento close:

Close (VariableArchivo);

Cerrar un archivo

Lectura y escritura de archivos

Seek (VariableArchivo, FileSize(VariableArchivo));

Seek (VariableArchivo, NumRegistro);

FilePos (VariableArchivo)

Posicionamiento en el interior de un archivo

Abrir archivos

Assign (Archivo, 'Nombre.ext');

VAR

Archivo : FILE OF Datos;

Persona : Datos;

Asignación de un archivo

TYPE

Datos = RECORD

Nombre : String[40];

Domicilio : String[60];

Edad : Integer;

EdoCivil : String[10];

END;

PROGRAM Archivo_Tipeado;

VAR

Archivo : FILE OF Integer;

BEGIN

END.

VariableArchivo : FILE OF TipoElementos;