Ficheros de texto.
Introducción.
Un fichero de texto es básicamente una secuencia
de caracteres, algunos de los cuales se pueden interpretar como marcas
(fin de línea, fin de página, fin de fichero).
Cláusula de contexto.
Los elementos necesarios para manejar ficheros de texto
se encuentran en el paquete "Text_IO", que habrá que incluir en
la cláusula de contexto.
with Text_IO;
use Text_IO;
Declaración
Para poder usar ficheros de texto se deben declarar
en el programa variables de tipo "File_Type". Estas variables se conocen
como ficheros lógicos, o simplemente ficheros, en oposición
a los ficheros externos a los que hacen referencia. El programa manipula
los ficheros externos a través de los ficheros lógicos.
Fichero1 : File_Type;
Fichero2 : Text_IO.File_Type;
Apertura
Antes de poder hacer transacciones con una variable
fichero debe asociarse con un fichero externo; esto se puede hacer con
los procedimientos: "Create" y "Open". El primero sirve para crear un fichero
y el segundo para abrir un fichero que ya existe.
procedure Create (File
: in out File_Type;
Mode : in File_Mode := Out_File;
Name : in String := "";
Form : in String := "");
procedure Open
(File : in out File_Type;
Mode : in File_Mode;
Name : in String;
Form : in String := "");
-
File es la variable fichero (fichero lógico).
-
Mode es el modo de apertura (puede tomar los valores: "In_File",
"Out_File", "Append_File").
-
In_File abre el fichero en modo lectura.
-
Out_File abre el fichero en modo escritura (si el fichero ya existe,
se vacía).
-
Append_File abre el fichero en modo escritura para añadir
texto al final de un fichero existente.
-
Name es el nombre del fichero externo (no aparecerá en ningún
otro sitio del programa).
-
Form no se usa generalmente; es un parámetro que depende
del sistema y puede servir para cosas como proteger el fichero con una
password.
Create(Fichero1,Name => "C:\TEMP\unfichero.txt");
Open(Fichero2, In_File, "C:\TEMP\otrofichero.txt");
En el ejemplo, la primera sentencia crea y abre
en modo escritura un fichero externo llamado "C:\TEMP\unfichero.txt"
y lo asocia con la variable "Fichero1". La segunda sentencia abre en modo
lectura un fichero externo llamado "C:\TEMP\otrofichero.txt"
y lo asocia con la variable "Fichero2".
Los errores que pudieran producirse al intentar
abrir un fichero pueden controlarse mediante excepciones.
Existe una función para ver si un fichero
está abierto:
function Is_Open(File
: in File_Type) return Boolean;
Por ejemplo: "Is_Open(Fichero1)" devuelve True si
el fichero "Fichero1" está abierto y "False", si no.
Existen funciones similares para obtener el modo
de apertura y nombre de un fichero abierto.
function Mode
(File : in File_Type) return File_Mode;
function Name
(File : in File_Type) return String;
Cierre
Una vez que se ha terminado de trabajar con un fichero
se debe cerrar con la operación "Close".
procedure Close (File
: in out File_Type);
Close(Fichero1); --cierra Fichero1
Transferencia de información
Para realizar lecturas y escrituras desde/a ficheros
se utilizan las ya conocidas operaciones "get", "put", "get_line", "put_line",
con un primer parámetro que es la variable fichero de la que se
va a leer o escribir.
get_line(Fichero1,S,L);
put_line(Fichero2,S(1..L));
El texto leído de Fichero1 en la variable
S se copia en Fichero2. Se supone que S es una ristra de tamaño
fijo y L es una variable de tipo Natural.
Estructura del fichero
Existen operaciones para controlar las marcas del fichero
en relación a:
-
Líneas: "New_Line", "Skip_Line" y "End_Of_Line".
-
New_Line(Fichero1) --Inicia una nueva línea
en Fichero1
-
Skip_Line(Fichero1) --Salta hasta después
de la próxima marca de fin de línea
-
End_Of_Line(Fichero1)--Es una función que devuelve
True si se ha alcanzado el fin
--de la línea, y False en caso contrario
-
Páginas: "New_Page", "Skip_Page" y "End_Of_Page"
-
New_Page(Fichero1) --Inicia una nueva página
en Fichero1
-
Skip_Page(Fichero1) --Salta hasta después
de la próxima marca de fin de página
-
End_Of_Page(Fichero1)--Es una función que devuelve
True si se ha alcanzado el final
--de la página y False en caso contrario
-
Ficheros: "End_Of_File"
-
End_Of_File(Fichero1) es una función
que devuelve True si se ha alcanzado el final de fichero1 y False en caso
contrario.
Existen funciones para configurar el tamaño de
la línea y el tamaño de la página.
Eliminación de un fichero externo
Se realiza mediante la operación "Delete".
procedure Delete
(File : in out File_Type);
"Delete" borra el fichero externo asociado con la
variable fichero que se le pase y cierra ésta.
Además...
En el anexo A.10 del "Ada 95 reference manual"
incluido en la ayuda de ObjectAda 7.1 se puede encontrar más información
sobre manipulación de ficheros de texto.
Ejemplo
with Text_Io;
use Text_Io;
--El procedimiento Copiar_Fichero
copia un fichero de texto, llamado "original.txt"
--en otro llamado "copia.txt"
--precondiciones: debe existir
un fichero externo llamado "original.txt"
--
no debe existir un fichero externo llamado "copia.txt"
--postcondiciones: Existe
un fichero externo llamado "copia.txt" cuyo contenido es
--
idéntico al de "original.txt"
procedure Copiar_Fichero is
F_Entrada,F_Salida: File_Type;
Línea
: String(1..200);
Lon_Línea
: Natural;
begin
--se abren
los ficheros
Open(F_Entrada,Mode => In_File,Name
=> "original.txt");
Create(F_Salida,Name => "copia.txt");
--se copia
F_Entrada en F_Salida
while not End_Of_File(F_Entrada)
loop
Get_Line(F_Entrada,Línea,Lon_Línea);
Put_Line(F_Salida,Línea(1..Lon_Línea));
end loop;
--se cierran
los ficheros
Close(F_Entrada);
Close(F_Salida);
end Copiar_Fichero;
[Anterior][Inicio][Siguiente]