|
|
Manejo de Archivos
- Archivos de acceso secuencial
- Declaraci�n de un archivo
- Abrir archivos
- Escribir datos en un archivo
- Leer datos de un archivo
- Fin del archivo
- Cerrar archivos
- Funci�n Eoln
- Agregar datos a un archivo de texto
- Archivos de acceso directo
- Estructura del archivo
- Declaraci�n de un archivo
- Asignaci�n de un archivo
- Abrir archivos
- Registro actual y tama�o de un archivo
- Posicionamiento en el interior de un archivo
- Lectura y escritura de archivos
- Cerrar un archivo
Archivos de acceso secuencial
Los archivos de acceso secuencial son llamados tambi�n archivos de texto, est�n
formados por cadenas de caracteres separadas unas de otras por los c�digos retorno
de carro/avance de l�nea, que corresponden a los caracteres 13/10 del c�digo ASCII.
El final del archivo se indica mediante el caracter ASCII 26, que tambi�n se
expresa como ^Z o EOF.
Es posible visualizar estos archivos con la orden TYPE del sistema operativo
DOS y se pueden editar con cualquier editor de textos.
Este tipo de archivos solo permiten operaciones de lectura y escritura
secuenciales, la unica forma de modificarlos es agregando l�neas al final de
archivo.
Los pasos para leer o escribir en un archivo de este tipo son:
Declarar una variable de tipo texto y asociarla al nombre de un archivo. A esto
tambi�n se le llama declarar el archivo.
Abrir el archivo ya sea para lectura o escritura.
Leer o escribir datos en el archivo.
Cerrar el archivo
Declaraci�n de un archivo
Para declarar un archivo primero se declara una variable tipo text de la siguiente
forma:
VAR
Var Archivo : Text;
Una vez declarada la variable se asigna al nombre de algun archivo:
ASSIGN (VarArchivo, NombreArchivo);
Donde NombreArchivo es una cadena de caracteres que contiene el nombre del archivo,
la unidad de disco donde se encuentra y el directorio. Por ejemplo:
ASSIGN (VarArchivo, 'C:\DOS\PRUEBA.TXT');
Abrir archivos
Exsiten tres formas de abrir un archivo:
Rewrite
Reset
Append
Escribir datos en un archivo
Para escribir datos a un archivo se utilizan las instrucciones Write y WriteLn, como
si se quisiera escribir a la pantalla, con la diferencia de que se especificar� la
variable de archivo ya declarada. Ejemplo:
WriteLn(VarArchivo, 'Prueba de archivos');
Esta sentencia grabar�a el texto 'Prueba de archivos' en el archivo asignado a
VarArchivo.
Leer datos de un archivo
Para leer los datos de un archivo de acceso secuencial se utilizan las instrucciones
Read y ReadLn.
La instrucci�n Read lee uno o varios datos del archivo abierto y deja el puntero en
el mismo rengl�n en el cual ley� los datos, en cambio ReadLn lee los datos y mueve
el puntero al siguiente rengl�n.
Fin del archivo
Normalmente los archivos de este tipo se leen rengl�n por rengl�n hasta llegar al
final del mismo. Cuando se conoce de antemano el tama�o del archivo es posible
utilizar un ciclo FOR, pero es m�s seguro utilizar la funci�n EOF la cual es
verdadera despues de que el programa lee la �ltima linea de un archivo de acceso
secuencial.
La sintaxis de la funci�n EOF es:
EOF (VaribleArchivo);
Es com�n realizar la verificaci�n de la funci�n con un ciclo WHILE como en el
ejemplo siguiente:
WHILE NOT EOF(Archivo) DO
BEGIN
ReadLn(Archivo, Datos);
WriteLn(Datos);
END;
Cerrar archivos
Para asegurar que toda la informaci�n se grabe en el disco correctamente es
necesario cerrar el archivo antes de que se termine la ejecuci�n del programa,
de lo contrario se corre el riego de que la �ltima informaci�n que se haya
accesado no se grabe en su totalidad.
La instrucci�n para cerrar un archivo es Close, y su sintaxis es:
Close (VaribleArchivo);
Funci�n Eoln
La funci�n Eoln sirve para verificar si el puntero ha llegado al final de la
linea. Regresa el valor verdadero si se encuentra al final. Comunmente se
utiliza en las lecturas caracter por caracter.
Agregar datos a un archivo de texto
Para a�adir datos a un archivo de texto son necesarios los siguientes pasos:
Asignar un archivo a una variable con Assign
Agregar los datos con el procedimiento Append
Escribir los datos
Cerrar el archivo A continuaci�n se ilustra un ejemplo de un programa que
agrega una linea a un archivo de texto:
PROGRAM Archivo;
VAR
Texto : TEXT;
BEGIN
Assign (Texto, 'PRUEBA.DAT');
Append(Texto);
WriteLn(Texto, 'Agregando una linea al archivo PRUEBA.DAT');
Close (Texto)
END.
Archivos de acceso directo
Un archivo de acceso directo esta formado por un conjunto de partes individuales
que pertenecen al mismo tipo de datos. Cada uno de los componentes del archivo
es llamado registro.
Cada uno de los componentes de este tipo de archivos es accesible directamente.
Los archivos de acceso directo son tambi�n llamados archivos con tipos o tipeados.
Estructura del archivo
A diferencia de los archivos secuenciales, los archivos tipeados no estan
compuestos de lineas de caracteres, sino que se acomodan en registros con
structuras fijas. La longitud de los registros esta determinada por la
cantidad de bytes que se necesitan para almacenar el tipo de datos que
ontendr� el registro.
Por ejemplo, si se van a almacenar n�meros enteros en un archivo, cada registro
servir� para un n�mero espec�fico y ocupar� 2 bytes, el siguiente registro
Utilizar� los dos bytes siguientes del archivo y as� sucesivamente hasta
completar la cantidad de datos que se vayan a almacenar.
Este tipo de archivos no pueden ser visualizados con la instrucci�n type del
sistema operativo debido al formato utilizado para guardarlos.
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:
VariableArchivo : FILE OF TipoElementos;
Esta declaraci�n se realiza en la secci�n correspondiente a la declaraci�n de
Las variables. Ejemplo:
PROGRAM Archivo_Tipeado;
VAR
Archivo : FILE OF Integer;
BEGIN
END.
Normalmente no se desea crear archivos que puedan almacenar un solo tipo de
datos ya que se requeririan varios archivos, por ejemplo para alguna base de
datos: uno para los nombres, 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:
TYPE
Nombre_Reg = RECORD
Campo_del_registro_1 : Tipo;
Campo_del_registro_2 : Tipo;
...
Campo_del_registro_n : Tipo;
END;
Donde Nombre_Reg es el nombre del registro que se utilizar�,
Campo_del_Registro_x son las variables que estar�n contenidas en el registro
y Tipo es el tipo de cada una de las variables del registro.
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:
TYPE
Datos = RECORD
Nombre : String[40];
Domicilio : String[60];
Edad : Integer;
EdoCivil : String[10];
END;
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:
VAR
Archivo : FILE OF Datos;
Persona : Datos;
Asignaci�n de un 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:
Assign (Archivo, 'Nombre.ext');
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.
Abrir archivos
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 ciudado al momento de
abrir estos archivos.
Registro actual y tama�o de un archivo
La funci�n FileSize regresa el tama�o de un archivo, o mejor dicho devuelve el
n�mero de registros contenidos en �ste.
Al momento de abrir un archivo nuevo la funci�n FileSize regresa el valor de 0,
lo que significa que el archivo no tiene datos guardados en �l.
Posicionamiento en el interior de un archivo
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:
FilePos (VariableArchivo)
VariableArchivo 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:
Seek (VariableArchivo, NumRegistro);
Para moverse al final del archivo para agregar un nuevo registro se utiliza
este mismo comando con el parametro NumRegistro como sigue:
Seek (VariableArchivo, FileSize(VariableArchivo));
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.
Lectura y escritura de archivos
Para la lectura y escritura en un archivo de acceso directo unicamente se
utilizan los procedimientos Read y Write. Despues de cada operacion de
lectura o escritura el puntero se posiciona en el siguiente registro.
Para estar seguros de que se leera el registro que se desea se debe emplear
el procedimiento seek antes de cualquier procedimiento de lectura o
escritura.
Cerrar un archivo
Para cerrar los archivos abiertos se procede igual que en uno de acceso
secuencial, utilizando el procedimiento close:
Close (VariableArchivo);
|
|