next up previous contents
Siguiente: Números y enumerados Subir: Ficheros Anterior: Excepciones asociadas a ficheros   Índice General

Ficheros de texto

Hasta ahora hemos utilizado Text_IO para leer y escribir texto utilizando el teclado y la pantalla, pero también puede utilizarse para leer y escribir en disco ficheros de texto.

La especificación del paquete Text_IO proporciona un tipo de dato denominado File_Type con el que podemos declarar variables de tipo fichero. Por cada fichero que utilicemos, deberemos crear una variable de este tipo. Por ejemplo:

      with Text_IO;
      procedure Ejemplo_Fichero is
         Fichero : Text_IO.File_Type;
      begin
         ...
      end Ejemplo_Fichero;

Para trabajar con ficheros lo primero que debemos hacer es asociar a cada variable su fichero. Esto se hace con los procedimientos Create y Open. La diferencia fundamental entre los dos es que debemos utilizar Create cuando el fichero no existe aún (y queremos que Ada lo cree) y utilizaremos Open cuando el fichero ya existe en nuestro disco. Por ejemplo:

      with Text_IO;
      procedure Ejemplo_Fichero is
         Fichero : Text_IO.File_Type;
      begin
         Text_IO.Create (Fichero, Text_IO.Out_File, "saludo.txt");
         ...
      end Ejemplo_Fichero;

Si le decimos a Ada que cree un fichero y el fichero ya existía, Ada borra el fichero y crea uno nuevo con el mismo nombre.

Como vemos en este ejemplo, al asociar el nombre del fichero tenemos que decir si la información va a salir desde el programa Ada hacia el fichero (out) o si la información va a entrar en el programa Ada (in) porque el programa va a leerla.

Una vez asociado el nombre del fichero, ya podemos utilizar la variable para escribir o leer información del fichero. En Text_IO existen dos versiones de todos los procedimientos de escritura y lectura que conocemos (New_Line, Put, Get, Get_Line, etc.). Una versión accede directamente al teclado y la pantalla (es la versión que hemos utilizado hasta ahora); la otra versión es para utilizarla con ficheros. Esta segunda versión siempre recibe como primer parámetro una variable de tipo File_Type (no el nombre del fichero), para saber en qué fichero debe leer o escribir.

   procedure Get (File : in File_Type; Item : out Character);
   procedure Get (Item : out Character);

   procedure Put (File : in File_Type; Item : in Character);
   procedure Put (Item : in Character);

   procedure Get (File : in File_Type; Item : out String);
   procedure Get (Item : out String);

   procedure Put (File : in File_Type; Item : in String);
   procedure Put (Item : in String);

   procedure Get_Line
     (File : in File_Type;
      Item : out String;
      Last : out Natural);

   procedure Get_Line
     (Item : out String;
      Last : out Natural);

   procedure Put_Line
     (File : in File_Type;
      Item : in String);

   procedure Put_Line
     (Item : in String);

Como ejemplo de uso, el siguiente programa Ada escribe varias líneas en un fichero de texto. Como el fichero es de texto, podemos leerlo con cualquier editor de textos.

      with Text_IO;
      procedure Ejemplo_Fichero is
         Fichero : Text_IO.File_Type;
      begin
         Text_IO.Create (Fichero, Text_IO.Out_File, "saludo.txt");
         Text_IO.Put_Line ("Este es un ejemplo de escritura");
         Text_IO.Put_Line ("en un fichero desde un programa Ada.");
         Text_IO.Close (Fichero);
      end Ejemplo_Fichero;

Al terminar de utilizar un fichero debo siempre cerrar el fichero (mediante Close).

Si quiero leer todo el contenido de un fichero de texto, justo antes de leer cada línea, tengo que preguntarle a Ada si he llegado ya al final del fichero (ya que Ada es quien único sabe si ya lo ha leido todo o no). Para hacer esto utilizaremos la función End_Of_File. Como ejemplo, el siguiente programa Ada lee todas las líneas de un fichero de texto y las escribe en pantalla.

      with Text_IO;
      procedure Ver_Fichero is
         Fichero  : Text_IO.File_Type;
         Linea    : String (1 .. 80);
         Longitud : Natural;
      begin
         Text_IO.Open (Fichero, Text_IO.Out_File, "saludo.txt");

         while not Text_IO.End_Of_File (Fichero) loop
            Text_IO.Get_Line (Fichero, Linea, Longitud);
            Text_IO.Put_Line (Linea (1 .. Longitud));
         end loop;

         Text_IO.Close (Fichero);
      end Ver_Fichero;

En este ejemplo vemos que podemos combinar fácilmente escritura y lectura en ficheros con lectura y escritura en pantalla. El Get_Line está leyendo del fichero, mientras que el Put_Line está escribiendo en pantalla.



Subsecciones
next up previous contents
Siguiente: Números y enumerados Subir: Ficheros Anterior: Excepciones asociadas a ficheros   Índice General
Javier Miranda 2002-10-03