Buenas, tengo un problema al trabajar con ficheros, necesito leer de un fichero de texto en este formato codigofecha identificador cantidad
tendria que leer el identificador y la cantidad para luego comparar el identificador con otro que hay en un fichero de datos y poder sacar el nombre del articulo correspondiente.
Dejo el codigo que he hecho hasta ahora.
WITH Ada.Text_IO, Interfaces.C;
WITH Ada.Integer_Text_IO;
WITH Ada.Strings.Unbounded;
WITH Ada.Strings.Fixed;
WITH Ada.Strings.Bounded;
WITH Ada.Integer_Text_IO;
--USE Ada.Text_IO, Interfaces.C;
--USE Ada.Integer_Text_IO;
WITH Ada.Direct_IO;
PROCEDURE Peliculon5 IS
   -- Variables   
      Opcion : Character;   
   -- Tipos de variables.         
      TYPE TpGenero IS (Oeste, Accion, Romantica, Terror);
      TYPE TpEstado IS (Alta, Baja);      
      PACKAGE TpGenero_IO IS NEW
      Ada.Text_IO.Enumeration_IO(TpGenero);
      USE TpGenero_IO;
      PACKAGE TpEstado_IO IS NEW
      Ada.Text_IO.Enumeration_IO(TpEstado);
      USE TpEstado_IO;      
      TYPE TpPelicula IS RECORD
         IdPelicula : Positive;
         Titulo : String (1 .. 50);
         Genero : TpGenero;
         Estado : TpEstado;
         Stock : Integer;
      END RECORD;      
      PACKAGE FicheroPelicula IS NEW Ada.Direct_IO(TpPelicula);
      USE FicheroPelicula;
   -- Variables
      NuevaPelicula : TpPelicula;
      Pelicula : TpPelicula;      
      NuevaVenta : Ada.Text_IO.File_Type;                     
-------------------------------------------------------------------------------------
-------------------- Subprograma para leer archivo directo binario ------------------ 
-------------------------------------------------------------------------------------
  PROCEDURE Peliculas(Pelicula : IN OUT TpPelicula) IS                
      LonPeli : natural:=0;
     USTitulo : Ada.Strings.Unbounded.Unbounded_String;--  .Unbounded_String;     
      IdPeliculaNew : Positive;
      FicheroPeliculas   : File_Type;
      Tamagno : Count;
      Posicion : Positive_Count;      
   BEGIN      
      Open(FicheroPeliculas, Inout_File, "peliculas.dat");            
      Tamagno := Size(FicheroPeliculas);      
      for i in  1 .. Tamagno loop
         Read (FicheroPeliculas, Pelicula, i);
         Ada.Integer_Text_IO.Put (Pelicula.IdPelicula, width =>3);
         --ada.Text_IO.New_Line;
         Ada.Text_IO.Put("   ");
         Ada.Text_IO.Put(Pelicula.Titulo);
         Put(Pelicula.Genero, width=>11);
         Put(Pelicula.Estado, width=> 6);
         Ada.Integer_Text_IO.Put(Pelicula.Stock, WIDTH => 4);         
         Ada.Text_IO.New_Line;
      end loop;
      IdPeliculaNew := Pelicula.IdPelicula + 1; --Añado un nuevo idPelicula    
      Pelicula.IdPelicula := IdPeliculaNew;      
      -- Cojo los campos del fichero Peliculas.dat por teclado.
      Ada.Text_IO.Put("Titulo de la Pelicula: ");
      Ada.Text_IO.Get_Line(Pelicula.Titulo, LonPeli);
      USTitulo := Ada.Strings.Unbounded.To_Unbounded_String(Pelicula.Titulo(1 .. LonPeli));      
      Ada.Strings.Fixed.Move(ada.Strings.Unbounded.To_String(USTitulo), Pelicula.Titulo);         
      Ada.Text_IO.Put("Genero de la Pelicula (Oeste, Accion, Romantica, Terror): ");
      Get(Pelicula.Genero);
      ada.Text_IO.New_Line;
      Ada.Text_IO.Put("Estado de la pelicula (Alta, Baja): ");
      Get(Pelicula.Estado);
      Ada.Text_Io.New_Line;
      Ada.Text_IO.Put("Numero de peliculas en Stock: ");
      Ada.Integer_Text_IO.Get(Pelicula.Stock);    
      Ada.Text_IO.Skip_Line;            
      Write(FicheroPeliculas, Pelicula); -- Escribo en el fichero Peliculas.dat.                                
      Close(FicheroPeliculas);  -- Cerramos el fichero.
   END Peliculas;   
-------------------------------------------------------------------------------------
---------------------- FIN SUBPROGRAMA LECTURA DE ARCHIVO DIRECTO -------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------- Subprograma para leer archivo de texto-------------------------- 
-------------------------------------------------------------------------------------
   PROCEDURE Ventas (FicheroPorcentaje: IN OUT  Ada.Text_IO.File_Type) IS                     
   Contador : Integer;
   IdPeliculav: Integer;
      Cantidadv : Integer;                        
   -- Variables fichero peliculas.dat 
      FicheroPeliculas   : File_Type;
      Tamagno : Count;
      Posicion : Positive_Count;
      TYPE VecIdPelicula IS ARRAY (1 .. Tamagno) OF Integer;
   -- Variables fichero ventas.txt.
   FicheroVentas : ada.Text_IO.File_Type;
   Linea : String (1 .. 80);
   Longitud : Natural;   
   -- Variables Fichero porcentje.txt.
   --FicheroPorcentaje : ada.Text_IO.File_Type;
BEGIN
   Open(FicheroPeliculas, Inout_File, "peliculas.dat");   
   Ada.Text_IO.Open (FicheroVentas, Ada.Text_IO.In_File, "ventas.Txt");   
   Contador := 0;   
  -- Escritura del fichero porcentaje.txt    
   Ada.Text_IO.Open (FicheroPorcentaje, Ada.Text_IO.Out_File, "porcentaje.Txt");
   Ada.Text_IO.Put_Line(FicheroPorcentaje,"          Informe del porcentaje de ventas por pelicula");
   Ada.Text_IO.Put_Line(FicheroPorcentaje,"          =============================================");
   Ada.Text_IO.Put_Line(FicheroPorcentaje,"  Titulo de la Pelicula                               Porcentaje de ventas");
   Ada.Text_IO.Put_Line(FicheroPorcentaje,"===================================================   ====================");     
   --Lectura del archivo de texto "ventas.txt".
   Tamagno := Size(FicheroPeliculas);
   WHILE NOT Ada.Text_IO.End_Of_File (FicheroVentas) LOOP   
      Contador := Contador+ 1;    
      Ada.Text_IO.Get_Line (FicheroVentas, Linea, Longitud); --Leo el fichero      
      Idpeliculav := Integer'Value(Linea(17 .. 24)); -- Cojo solo el id de pelicula      
      Cantidadv := Integer'Value(LInea(25 .. 32)); -- Cojo solo la cantidad de peliculas        
   -- Recorro el fichero peliculas.dat para escribir el titulo de la pelicula.
      for i in  1 .. Tamagno loop              
         Read (FicheroPeliculas, Pelicula, i);       
         VecIdPelicula (I) := Pelicula.IdPelicula;      
         Ada.Text_IO.Put_line(FicheroPorcentaje, Pelicula.Titulo); --Escribo en el fichero
         Ada.Text_IO.Put(Pelicula.Titulo); -- Saco por pantalla.         
         Ada.Text_IO.New_Line;
      END LOOP;
   END LOOP;   
      Ada.Integer_Text_IO.Put(Contador);   
      Ada.Text_IO.Close (FicheroVentas); -- Cerramos el fichero ventas.txt
      close(FicheroPeliculas);  -- Cerramos el fichero peliculas.dat.
      Ada.Text_IO.Close(FicheroPorcentaje); -- Cerramos el fichero porcentaje.txt               
END Ventas;
-------------------------------------------------------------------------------------
---------------------- FIN SUBPROGRAMA LECTURA DE ARCHIVO DE TEXTO ------------------
------------------------------------------------------------------------------------- 
-------------------------------------------------------------------------------------
----------------------  SUBPROGRAMA PORCENTAJE DE ARCHIVO DE TEXTO ------------------
------------------------------------------------------------------------------------- 
PROCEDURE Porcentaje IS      
   FicheroPorcentaje : ada.Text_IO.File_Type;   
BEGIN      
   Ada.Text_IO.Open (FicheroPorcentaje, Ada.Text_IO.In_File, "porcentaje.Txt");      
   Ada.Text_IO.Skip_Line;   
   ada.Text_IO.Close(FicheroPorcentaje);      
END Porcentaje;
-------------------------------------------------------------------------------------
---------------------- FIN SUBPROGRAMA PORCENTAJE DE ARCHIVO DE TEXTO ---------------
------------------------------------------------------------------------------------- 
-------------------------------------------------------------------------------------
--------------------------- Subprograma para borrar la pantalla ---------------------
-------------------------------------------------------------------------------------
PROCEDURE Cls IS         
   PACKAGE C RENAMES Interfaces.C;     
   FUNCTION System (Command : C.Char_Array) RETURN C.Int;   
   PRAGMA Import(C, System, "system");        
   Rc : C.Int;   
  BEGIN    
     Rc := System (C.To_C ("cls"));     
  END Cls;
--------------------------------------------------------------------------------------
----------------------Fin del subprograma que borra la pantalla ----------------------
--------------------------------------------------------------------------------------
BEGIN
--------------------------------------------------------------------------------------
--------------------------------- Menu de la aplicacion ------------------------------
--------------------------------------------------------------------------------------    
    WHILE (Opcion /= '0') LOOP
         CLS;
         Ada.Text_IO.Put_Line("       MENU PELICULON      ");
         Ada.Text_IO.Put_Line("===========================");
         Ada.Text_IO.Put_Line("Películas");
         Ada.Text_IO.Put_Line("  A. Alta Nueva Pelicula");
         Ada.Text_IO.Put_Line("Informe");
         Ada.Text_IO.Put_Line("  P. Porcentaje Ventas por Pelicula");
         Ada.Text_IO.Put_Line("0. Salir del programa");
         Ada.Text_IO.New_Line;
         Ada.Text_IO.Get_Immediate(Opcion);      
      CASE Opcion IS
          WHEN 'A' =>
            Ada.Text_IO.Put_Line("Introduce todos los campos que te pidan");
            Peliculas(NuevaPelicula);
         WHEN 'P' =>
            Ada.Text_IO.Put_Line("El porcentaje de ventas es el siguiente");
            Ventas(NuevaVenta);
            Ada.Text_IO.Get_Immediate(Opcion);                        
         WHEN OTHERS =>
            NULL;                         
      END CASE;      
   END LOOP;
   CLS;      
   Ada.Text_IO.Put("El programa ha sido finalizado por el usuario");
END Peliculon5;