Guía mínima de Ada 95

Ficheros uniformes.

Introducción

    Un fichero uniforme es una secuencia arbitrariamente larga de elementos del mismo tipo. En Ada se distinguen ficheros secuenciales y ficheros de acceso directo. (Un fichero de texto es básicamente un fichero secuencial de caracteres).

Cláusula de contexto

    Los elementos necesarios para manejar ficheros secuenciales se encuentran en el paquete "Sequential_IO", los ficheros de acceso directo se manejan con el paquete "Direct_IO" que habrá que incluir en la cláusula de contexto.
    with Text_IO,Sequential_IO,Direct_IO;
    use Text_IO;

Declaración

    Para poder usar ficheros uniformes se ha de definir previamente el tipo de sus componentes (a menos que sea de un tipo predefinido)
type TPersona is
 record
    Nombre : string(1..20);
    DNI    : string(1..10);
    Edad   : natural;
 end record;

    Una vez definido el tipo, se han de definir instancias de los paquetes de manejo de ficheros, según el tipo de acceso que se vaya a utilizar.
    package FichTPersona_Sec is new Sequential_IO(TPersona); -- Acceso secuencial
    package FichTPersona_Dir is new Direct_IO(TPersona); -- Acceso directo
    use FichTPersona_Sec,FichTPersona_Dir;

    Ahora se pueden declarar variables de tipo fichero directo o secuencial:

  Fichero1 : FichTPersona_Sec.File_Type;
  Fichero2 : FichTPersona_Dir.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; --InOut_File en acceso directo
                      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.dat");
    Open(Fichero2,InOut_File,"C:\TEMP\otrofichero.dat");

    En el ejemplo, la primera sentencia crea y abre en modo escritura un fichero secuencial externo llamado "C:\TEMP\unfichero.dat"  y lo asocia con la variable "Fichero1". La segunda sentencia abre en modo lectura/escritura un fichero externo de acceso directo llamado "C:\TEMP\otrofichero.dat" 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 han de declarar previamente variables del tipo de los componentes del fichero.
    Persona_1,Persona_2,Persona_3 : TPersona;

    Las operaciones de entrada/salida se realizan con las operaciones "Read" y "Write".
    procedure Read(File : in out File_Type; Item : out Element_Type;
                                            From : in  Positive_Count);
    procedure Read(File : in out File_Type; Item : out Element_Type);

    Read lee un elemento de un fichero y avanza una posición:

    procedure Write(File : in out File_Type; Item : in Element_Type;
                                             To   : in Positive_Count);
    procedure Write(File : in out File_Type; Item : in Element_Type);

    Write escribe un elemento en un fichero y avanza una posición:

Estructura del fichero

    Existe una operación para controlar la marca de fin de fichero:

Operaciones con ficheros de acceso directo

    El tamaño, en número de componentes, de un fichero de acceso directo se obtiene mediante la función "Size", que devuelve un número comprendido entre 0 y el máximo tamaño posible definido en la implementación del compilador de Ada que se esté usando.
    function Size(File : in File_Type) return Count;

    Se puede saltar a una posición específica de un fichero utilizando el procedimiento "Set_Index"
    procedure Set_Index(File : in out File_Type; To : in Positive_Count);

    La posición actual en el fichero se puede averiguar mediante la función "Index", que devuelve un valor comprendido entre 1 y el máximo tamaño posible definido en la implementación.
    function Index(File : in File_Type) return Positive_Count;

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 los anexos A.7, A.8 y A.9 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.



[Anterior][Inicio][Siguiente]