• Jueves 22 de Agosto de 2019, 18:22

Autor Tema:  problemas con ficheros  (Leído 1852 veces)

gavilan77

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
problemas con ficheros
« en: Viernes 29 de Enero de 2010, 11:42 »
0
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;