2. Archivos de
Texto
Archivo de
Tipo Puntero
Tipo
El Tipo
FILE
Tipo
Tipo Simple
Estructurado
3. Sintaxis
TYPE
tfichero = FILE OF Tipo_de_Datos;
tficheroTexto = TEXT;
VAR
nom_fich1 : FILE OF Tipo_de_Datos:
nom_fich2 : TEXT;
4. Operación de Asignación de un Archivo
En Turbo Pascal esta operación se realiza mediante un procedimiento
predefinido llamado ASSIGN (Asignar); la sintaxis de este procedimiento es:
ASSIGN (Fich_Logico, Nombre_archivos_fisico);
• Fich_Logico: Es una variable de tipo archivo.
• Nombre _Archivo: Se trata de cadena de caracteres (o de tipo STRING) que representa el
Nombre del archivo físico, o el lugar donde este se encuentra.
5. Archivos Como Parámetros
El caso de arrays y registro, una función no puede devolver ningún tipo de datos estructurados,
por lo que en el caso de los archivos tampoco es posible.
Este hecho se debe a que los contenidos de un archivo no se puede copiar en otro utilizando
Una instrucción de la forma:
Variable_archivo 1:= variable_archivo 2;
6. Sintaxis
A continuación se muestran algunos ejemplos de paso de parámetro de tipo fichero:
TYPE
Tipo_mes= (enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre,
octubre, noviembre, diciembre);
Fich_meses = FILE OF Tipo_mes;
Fich_letras = FILE OF Char;
Fich_numeros = FILE OF real;
VAR
Fmeses : Fich_meses;
Libro1, Libro2 : Fich_numeros;
Fdatos, Festadisticas : Fich_numeros;
logica : boolean;
PROCEDURE uno (VAR f1 : Fich_meses; VAR f2, f3 : Fich_letras);
….
FUNCTION dos (VAR f1 : Fich_letras; VAR f2 : Fich_numeros): boolean;
….
BEGIN
uno (Fmeses, Libro1, Libro2);
logica : = dos (Libros1, Fdatos);
logica : = dos (Libros2, Festadisticas);
END.
7. Archivos de Texto
TYPE
Tfich_texto1 = FILE OF char;
Tfich_texto2 = TEXT;
VAR
nom_fich1 : Tfich_texto1;
nom_fich2 : Tfich_texto2;
nom_fich3 :TEXT;
Caso particular de los archivos de texto:
1.- Declarar y asignar el archivo de texto (físico).
2. - Abrir el archivo.
3.- Leer/Escribir los datos sobre el archivo.
4.- Cerrar el archivo.
8. Declaración y asignación de archivos
de texto
TYPE
Fich_texto = TEXT;
Fich_caracteres = FILE OF char;
VAR
flineas : Fich_texto;
fletras : Fich_caracteres;
BEGIN
(asignación del fichero de texto)
assign (flineas, ‘fichero_ejermplo1.txt’);
(asignación del fichero de caracteres)
assign (fletras, ‘fichero_ejemplo2.txt’);
……
END.
10. Lectura/Escritura de datos en archivos
de texto
Lectura en archivo de texto: para poder leer los elemento de
un archivo es necesario haberlo abierto previamente mediante
una operación de RESET. Existe dos procedimiento que nos
permiten realizar la operación de lectura:
READ(Archivo_logico, x1,x2,x3,…….,xn);
READLN(archivo_logico x1,x2,x3,…..,xn);
11. Sintaxis
Var
fichero: TEXT;
w, x, y, z : char;
….
Begin
assign(fichero, ‘c:mifichero.txt’
reset(fichero); {se abre para lectura}
read(fichero, w, x, y); {se leen tres caracteres seguidos}
read(fichero, z); {se lee un caracter}
writeln(w, x, y, z); {se muestran por pantalla}
close(fichero); {Se cierra el fichero}
End.
12. Escritura En Archivos De Texto
Sintaxis
Para poder escribir datos en un archivo de texto es necesario haberlo abierto
Previamentecon cualquiera de los dos procedimientos predefinidos de Pascal:
•REWRITE
•APPEND
Una vez abierto el archivo, se pueden escribirse datos (caracteres o cadenas de
Caracteres) empleando los procedimientos:
WRITE(fich_logico, E1, E2, …, En);
WRITELN(fich_logico, E1, E2, …,En);
13. Operación De Cierre En Archivos De
Texto
Si no se desea perder todo los datos de un archivo, una vez terminadas las diferentes
Operaciones sobre el, es necesario cerrarlo. La operación de cierre de un fichero situa
un carácter especial en el lugar donde se encuentra situado el puntero de Lectura/Escritura
El carácter EOF (End Of File, o fin del fichero) es utilizado para identificar el final del mismo.
Close(arch_logico);
14. Otras Operaciones Con Archivos De Texto
EOLN EOF
Sintaxis:
EOLN(Archivo_Logico);
EOF(Archivo_Logico);
15. Archivos Con Tipo Binarios
Sintaxis:
TYPE
tFichero_binario = FILE OF tipo_base;
VAR
nom_fiche1 : tFichero_binario;
nom_fiche2 : FILE OF tipo_base;
16. Operaciones Con Archivos Binarios
Declaración y Asignación del
Archivo
Apertura Del Archivo Binario
Lectura/Escritura en Archivos
Binarios
Operación de Cierre en un
archivo Binario
17. Declaración y Asignación del Archivo
Estas operaciones se realizan exactamente igual que para los archivos de texto:
TYPE
fBinario1 = FILE OF integer;
fBinario2 = FILE OF boolean;
VAR
F1 : fbinario1;
F2 : fbinario2;
BEGIN
{Asignacion del fichero de enteros}
assign(F1,’Fichero_ejemplo1.dat’);
{Asignacion del fichero de Booleanos}
assign(F2,’Fichero_ejemplo2.dat’);
……..
END.
20. Operación De Cierre En Un Archivo
Binario
La operación de cerrado del archivo se realiza exactamente igual que en
el caso de los archivos de texto. Realizar esta operación es igualmente
importante si no se desea perder los datos almacenados en el archivo
binario. La sintaxis es:
CLOSE(archivo_logico);
21. Otras Operaciones Con Archivos
Binarios
Operaciones De Control
Operaciones De Acceso
Directo
Operaciones Para La Gestión
De Archivos Con Tipo
22. Operaciones De Control
Estas operaciones proporcionan información sobre la posición donde se encuentra
El puntero de lectura/escritura. Existe una funcion de control basica que puede
utilizarse:
•EOF (archivo_logico): esta funcion booleana devuelve verdadero si el puntero de
lectura/escritura se encuentra situado sobre el carácter fin de fichero (EOF).
•EOLN(archivo_logico): al igual que sucede con las funciones predefinidas READLN y
WRITELN, esta funcion no tiene sentido en archivos con tipo, y por lo tanto no
existe para este tipo de datos.
Archivos de Texto: Los Archivos de texto que Pascal almacena caracteres ASCIIArchivos Con Tipo: los archivos de texto en pascal son archivos de tipo binario que almacenan elementos de un tipo predefinido (simple, estructurado o definido por el usuario). Los tipos permitidos para crear archivos con tipo de Pascal son:Simple: Cualquiera de los tipos simples predefinido en pascr (integer, booleam, real, char, etc.), o los definidos por el usuario (subrangos o enumerados), pueden ser utilizados para construir un archivo.Estructurado: pueden utilizarse los tipos ARRAY, Record, String o Set para construirse archivos que almacenen archivos (File of File).Puntero: Pascal permite construir ficheros que almacenen datos de tipo puntero.El tipo File es el tipo predefinido en pascal, que permite la implementacion y gestion de archivos. Dado que puede hablarse de dos grandes tipos de archivos en Pascal (de Texto y con tipo).
Donde Nombre es un identificador valido en pascal, que es utilizado como referencia lógica, y que permite acceder a la información almacenada en el archivo físico, las palabras reservadas FILE y OF permite declarar el tipo de datos que son almacenados en el archivo físico; por lo tanto, este tipo de declaración se utilizara para definir ficheros binarios. La segunda declaración utiliza la palabra reservada TEXT, que se emplea para crear ficheros de texto.Pueden crearse archivos de cualquier tipo definible en pascal excepto de tipo fichero.
Un archivo de texto es una estructura de datos que permite almacenar caracteres alfanuméricos en un codificación estándar en memoria (secundaria o principal). En Turbo Pascal la codificación estándar utilizada es ASCII. Es posible declarar de texto de dos formas diferentes.
Ambas operaciones han sido estudiadas en los apartados anteriores. Una vez declarado el fichero lógico en la sección de declaración de tipos, o en la sección de declaración de variables, se utilizara la sentencia ASSIGN para establecer la relación entre ese fichero lógico y el fichero físico que se desea manipular.
RESET: Archivo _lógico esta operación abre el archivo físico (que corresponde al nombre lógico que le ha sido previamente asignado) y sitúa el puntero de lectura/escritura en la primera posición del archivo en modo LECTURA.REWRITE: (Archivo Lógico) la operación rewrite abre el archivo y sitúa el puntero en la posición inicial del mismo . En modo LECTURA/ESCRITURAAPPEND: (Archivo_logico) cuando se dispone de un archivo de texto y se desea añadir nuevos datos (sin borrar los ya almacenados), debe utilizarse la operación append esta operación abre el archivo y sitúa el puntero de lectura/escritura al final del mismo
Ambos procedimientos tienen un funcionamiento diferente. Si se utiliza READ, se lee de la posición actual del puntero de lectura/escritura un carácter (que puede almacenarse sobre una variable del tipo char o cadena), y se mueve el puntero a la siguiente posición del archivo. Si se utiliza el procedimiento READLN(Fichero X) se lee el conjunto de caracteres desde la pocision que ocupa el puntero, hasta que este encuentra el carácter fin de linea (EOLN), y se almacena sobre la variable de salida si es de tipo STRING se devuelve la cadena; si es de tipo char se devuelve el primer carácter leido y se pasa por alto el resto de la cadena). La funcion READLN situara el puntero de lectura/escritura inmediatamente a continuacion del carácter fin de linea. Por lo tanto debe recordarse que:READ: Lee un carácter y situa el puntero despues del ultimo carácter leido. Deben utilizar se variables de tipo char para almacenar los caracteres leidos.READLN: lee desde la posicion en la que se encuentra el puntero hasta EOLN. Deben utilizarse variables de tipo STRING.
Archivo_logicorepesenta el identidicador de tipo archivo que debe haber sido previamente asignado a un archivo fisico que existia. Al igual que secuedia con los procedimientos de lectura, los procedimientos de escritura tienen un comportamiento ligeramente distinto. El procedimiento WRITE escribe los paramentos que se le pasan en el archivo y deja el puntero despues del ultimo elemento escrito. Sin embargo, cuando se utiliza WRITELN introduce un carácter de final de linea (EOLN) despues del ultiumoparametro introducido. De esta forma, WRITELN situa al puntero de lectura/escritura al comienzo de la linea siguiente.
Pascal proporciona dos funciones especialmenteutiles para trabajar con archivos de texto, para funciones permiten conocer al programador si el puntero de lectura/escritura que recorre el archivo ha llegado al final de una linea (es decir, si esta sobre el carácter especial eoln), o si ha llegado al final del fichero (eof). La sintaxis de estas funciones esEOLN(archivo_logico);EOF(Archivo_logico);Ambas funciones devuelve un valor logico en funcion de que el puntero de lectura/escritura cumpla, o no, la condicion correspondiente:EOLN(fichero): devuelve el TRUE si el puntero ha llegado al final de la linea.EOF(Fichero): devuelve TRUE si el puntero ha llegado al final del archivo.
El otro tipo de archivos utilizables en pascal son los archivos con tipo o archivos binarios. Un archivo con tipo es una estructura de datos que permite almacenar datos del mismo tipo; es decir, al igual que los arrays, los archivos binarios permiten almacenar conjuntos de datos homogeneos. La sintaxis para declarar archivos binarios es:TYPEtFichero_binario = FILE OF tipo_base;VAR nom_fiche1 : tFichero_binario; nom_fiche2 : FILE OF tipo_base;
Se pueden utilizar únicamente dos de las operaciones vistas para el caso de los archivos de textoRESET(archivo_logico): esta operación abre el archivo físico y sitúa el puntero en la primera posición del archivo en modo LECTURA/ESCRITURA. Esta operación, al igual que en el caso de los archivos de texto, genera un error si al intentar abrir el fichero este no existe.REWRITE(archivo_logico): la operación rewrite abre el archivo y sitúa el puntero en la posición inicial del mismo, en modo LECTURA/ESCRITURA. Al igual que sucedió con los archivos de texto, si el archivo físico asignado no existe crea uno nuevo vacio; si el fichero existe lo sobrescribe, por lo que sus datos serán borrados y el archivo aparecerá vacio.APPEND(archivo_logico): esta operación no esta disponible para los archivos con tipo, por lo tanto, si intenta utilizarse provocara un error(tipo de fichero incorrecto).Si se desea implementar la operación APPEND en archivos binarios, será necesario utilizar RESET, situar el puntero de lectura/escritura al final de fichero y comenzar a añadir datos desde esa posicion.
Lectura de Datos: se utiliza el procedimiento predefinido READ con la sintaxis vista en el caso de los archivos de texto: READ(archivo_logico,X1,X2,….,Xm), donde Xi son variables del mismo tipo, o compatible, que el archivo lógico declarado.Escritura de Datos: en este caso se utilizara el procedimiento predefinido WRITE, con la sintaxis: WRITE(archivo_logico,E1,E2,….,En), donde Ei son expresiones del mismo tipo (o compatibles) que el declarado en archivo_logico.READLN/WRITELN: estos dos procedimiento NO están definidos para archivos con tipo, esto es lógico si se piensa que ambos procedimientos están pensados para trabajar sobre el concepto de línea, es decir, para leer (READLN) un conjunto de caracteres hasta llegar al carácter especial fin de la línea (eoln), o para escribir o mostrar (WRITELN) un conjunto de caracteres hasta el fin de línea. En los archivos binarios el concepto de fin de línea no tiene sentido dado que no se almacena texto en los archivos, por lo tanto estas dos funciones carece de sentido.
Las operaciones y funciones de acceso directo permiten acceder a cualquier elemento de un archivo en funcion de su posicion. Es decir, este tipo de funciones permiten implementar el acceso directo o aleatorio en los archivos con tipo. Este acceso, que no es posible en los archivos de texto, sera realizable en los binarios gracias a las siguientes funciones:Seek(archivo_logico): esta funcionsitua el puntero de lectura/escritura en una “posición” especifica. El parametro “posicion ” debe ser de tipo LONGINT. Esto es debido a que el tamaño de un fichero puede ser muy grande. Si se utiliza un parametro de tipo integer se producirá un error si el fichero tiene mas de MAXINT(32767) elementos. La posicion del primer elemento de cualquier fichero ocupa la posicion 0.FileSize(archivo_logico): esta funcion devuelve un valor entero que corresponde al numero de elementos que posee el archivo.FilePos(archivo_logico): esta funcion devuelve un valor entero que indica la posición actual del puntero de lectura/escritura en el archivo que se le ha pasado como parametro.
Esta operaciones permiten realizar diversas operaciones sobre los archivos fisicos almacenados en la memoria. De esta forma podra cambiarse el nombre de un archivo, o borrarse desde el programa si esto fuese necesario. Las funciones predefinidas de Turbo Pascal para la gestión de archivos fisicos son:RENAME(arch_logico, nuevo_nombre_arch_fisico): este procedimiento permite modificar el nombre del archivo fisico desde un programa. Para poder utilizar esta operación, el archivo logico debe estar CERRADO. La operación implementada por esta funcion es equivalente a ejecutar el comando rename, o ren(en MsDOS), o rn (Lunix), contra el sistema operativo.ERASE(arch_logico) este procedimiento borra el archivo fisico asociado al archivo logico. Por lo tanto, equivale a ejecutar comandos como del(MSDOS), o rm(Lunix), en sus correspondientes sistemas operativos.TRUNCATE(arch_logico) este procedimiento coloca el carácter EOF en la posicion actual del puntero de lectura/escritura. Por lo tanto, el archivo queda cortado(truncado) en esa posicion; de esta forma los elementos que estuviesen situados a continuacon se pierden.