Guía mínima de Ada 95

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 := "");
 

    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:     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]