All pastes #928525 Raw Edit

Kantis

public text v1 · immutable
·published 2008-03-05 03:11 UTC
rendered paste body
with Ada.Sequential_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
with Ada.Text_IO; use Ada.Text_IO;

procedure Files is

   type Interest_Array is
     array (1..10) of Integer;

   type Person_Type is
      record
         Family_Name   : String(1..20);
         Name          : String(1..20);
         Address       : String(1..20);
         City          : String(1..20);
         Tot_Interests : Integer;
         Interests     : Interest_Array;
      end record;

   package Person_IO is
      new Ada.Sequential_IO(Element_Type => Person_Type);

   function Is_In(Interest : in Integer; Interests : in Interest_Array) return Boolean is
   begin
      for I in Interests'Range loop
         if Interest = Interests(I) then
            return True;
         end if;
      end loop;
      return False;
   end Is_In;


   function Common_Interests(Interests : in Interest_Array; Person : in Person_Type) return Interest_Array is
      Result_Array : Interest_Array := (others => 0);
      Location : Integer := 1;
   begin
      for I in 1..Person.Tot_Interests loop
         if Is_In(Person.Interests(I), Interests) then
            Result_Array(Location) := Person.Interests(I);
            Location := Location + 1;
         end if;
      end loop;
      return Result_Array;
   end Common_Interests;

   procedure Put(File : in Ada.Text_IO.File_Type; Person : in Person_Type; Interests : in Interest_Array) is
      Temp : Interest_Array := Common_Interests(Interests, Person);
   begin
      if Temp(1) /= 0 then
         Put(File, Person.Nam4e);
         Put(File, Person.Family_Name);
         Put(File, Person.Address);
         Put(File, Person.City);
         Put(File, "Intressen: ");
         for I in Temp'Range loop
            if Temp(I) /= 0 then
               Put(File, Temp(I), Width => 3);
            else
               exit;
            end if;
         end loop;
         New_Line(File);
      end if;
   end Put;

   Input_File : Person_IO.File_Type;
   Input_Mode : Person_IO.File_Mode := Person_IO.In_File;

   Output_File : Ada.Text_IO.File_Type;
   Output_Mode : Ada.Text_IO.File_Mode := Out_File;

   Search : Interest_Array := (others => 0);

   Interest_Input : Integer;

   Temp_Person : Person_Type;

begin

   Put("Ange en foljd av intressen 1 till 15, max 10 st. Avslute med 0: ");

   Get(Interest_Input);

   while Interest_Input /= 0 loop
      for I in Search'Range loop
         if Search(I) = 0 then
            Search(I) := Interest_Input;
            exit;
         end if;
      end loop;
      Get(Interest_Input);
   end loop;

   Person_IO.Open(Input_File, Input_Mode, "REG.BIN");
   Ada.Text_IO.Open(Output_File, Output_Mode, "results.txt");

   while not Person_IO.End_Of_File(Input_File) loop
      Person_IO.Read(Input_File, Temp_Person);
      Put(Output_File, Temp_Person, Search);
   end loop;

end Files;