problemas con ficheros

problemas con ficheros

Notapor gavilan77 » Vie Ene 29, 2010 11:42 am

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;
gavilan77
Nuevo miembro
 
Mensajes: 1
Registrado: Vie Ene 29, 2010 11:37 am

Volver a ADA

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado