next up previous contents
Siguiente: Resumen Subir: Ficheros Anterior: Ejemplo: Copia de un   Índice General

Ficheros de acceso secuencial y de acceso directo

Text_IO sirve para crear, leer y escribir ficheros de texto. Sin embargo, Ada también proporciona los paquetes genéricos Sequential_IO y Direct_IO que pueden crear, leer y escribir ficheros con cualquier formato. Este tipo de ficheros no puede verse fácilmente en pantalla (ya que en pantalla lo que vemos es sólamente texto). Cada uno tiene su propio tipo File_Type para crear ficheros. Por ejemplo:

       with Sequential_IO;
       procedure Ejemplo is
          package Seq_IO is new Sequential_IO (Integer);
          Fichero : Seq_IO.File_Type;
       begin
          ...
       end Ejemplo;

Igual que Text_IO, ambos paquetes tienen procedimientos para crear, abrir, cerrar ficheros. También tienen procedimientos para leer y escribir información en el fichero, pero se llaman Read y Write (en vez de Get y Put). Por ejemplo:

       with Sequential_IO;
       procedure Ejemplo is

          package Seq_IO is new Sequential_IO (Integer);

          Fichero : Seq_IO.File_Type;
       begin

          Seq_IO.Create
             (File => Fichero,
              Mode => Text_IO.Out_File,
              Name => "Numeros.dat");

          for Contador in 1 .. 100 loop
             Seq_IO.Write (Fichero, Contador);
          end loop;

          Seq_IO.Close (Fichero);

       end Ejemplo;

Sequential_IO simpre escribe o lee la información en posiciones consecutivas del fichero, mientras que Direct_IO puede escribir o leer en cualquier posición del fichero. Para ello, los procedimientos Read y Write de Direct_IO tienen un parámetro adicional que dice en qué posición del fichero queremos leer o escribir.

       with Direct_IO;
       procedure Ejemplo is

          package Dir_IO is new Sequential_IO (Integer);
          use type Dir_IO.Positive_Count;
          --  Con la frase "use type" le estoy diciendo a Ada
          --  que para sumar, restar multiplicar y dividir
          --  numeros de tipo Positive_Count utilice las
          --  funciones "+", "-", "*", "/" que estan en el
          --  paquete Dir_IO (en vez de utilizar la suma, resta,
          --  multiplicacion y division de numeros enteros).

          Fichero  : Dir_IO.File_Type;
          Posicion : Dir_IO.Positive_Count;

       begin

          Dir_IO.Create
             (File => Fichero,
              Mode => Text_IO.Out_File,
              Name => "Numeros.dat");

          Posicion := 10;
          Dir_IO.Write (Fichero, 500);

          Posicion := Posicion - 5;
          Dir_IO.Write (Fichero, 250);

          Dir_IO.Close (Fichero);

       end Ejemplo;

En este ejemplo hemos creado un fichero para escribir números, pero sólamente escribimos dos números. Primero escribimos el número 500 en la posición 10 del fichero (por tanto Ada deja espacio para los 9 primeros números). A continuación escribimos el número 250 en la posición 5 y cerramos el fichero (como no hemos escrito nada en las posiciones 1, 2, 3, 4, 6, 7, 8, 9 lo que hay es ``basura''; lo normal es que un programa controle bien lo que está escribiendo para no cerrar el fichero dejando basura dentro de él).

Ambos paquetes proporcionan todos los modos de apertura de fichero que proporciona Text_IO (In_File y Out_File). Sin embargo, cada uno permite un modo más:


next up previous contents
Siguiente: Resumen Subir: Ficheros Anterior: Ejemplo: Copia de un   Índice General
Javier Miranda 2002-10-03