SoloCodigo
		Programación General => Otros Lenguajes de Programación => ADA => Mensaje iniciado por: gavilan77 en Viernes 29 de Enero de 2010, 11:42
		
			
			- 
				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;