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;