with text_io,integer_io; use text_io,integer_io; with Communications_with_User; use Communications_with_User; with Standard_Natural_Vectors; use Standard_Natural_Vectors; with Standard_Natural_Vectors_io; use Standard_Natural_Vectors_io; with Symbol_Table; use Symbol_Table; with Symbol_Table_io; with Standard_Complex_Solutions; use Standard_Complex_Solutions; with Standard_Complex_Solutions_io; use Standard_Complex_Solutions_io; procedure grepsols is -- DESCRIPTION : -- Reads a solution list from file. -- Writes a selection of a solution list to file. function Select_Solutions ( sols : Solution_List; nb : Vector ) return Solution_List is -- DESCRIPTION : -- Selects the solutions according to the numbers in the vector nb. -- REQUIRED : the entries in nb are sorted in increasing order. res,res_last,tmp : Solution_List; ind : natural := nb'first; begin tmp := sols; for i in 1..Length_Of(sols) loop if i = nb(ind) then Append(res,res_last,Head_Of(tmp).all); ind := ind+1; end if; exit when (ind > nb'last); tmp := Tail_Of(tmp); end loop; return res; end Select_Solutions; procedure Initialize_Symbol_Table ( n : in natural ) is begin put("Give "); put(n,1); put_line(" symbols to initialize symbol table :"); Symbol_Table.Init(n); for i in 1..n loop declare sb : Symbol; begin Symbol_Table_io.get(sb); Symbol_Table.Add(sb); end; end loop; end Initialize_Symbol_Table; function Read_Selection return Vector is -- DESCRIPTION : -- Returns a vector of natural numbers. n : natural; begin put("Give the number of solutions to select : "); get(n); declare v : Vector(1..n); begin put("Give "); put(n,1); put(" natural increasing numbers : "); get(v); return v; end; end Read_Selection; procedure Main is infile,outfile : file_type; sols : Solution_List; begin new_line; put_line("Selecting elements from a list of solutions."); new_line; put_line("Reading the name of the file with the solutions."); Read_Name_and_Open_File(infile); get(infile,sols); Close(infile); new_line; put_line("Reading the name of the output file."); Read_Name_and_Create_File(outfile); new_line; put("There are "); put(Length_Of(sols),1); put_line(" solutions given."); declare sel : constant Vector := Read_Selection; selsols : Solution_List := Select_Solutions(sols,sel); begin Initialize_Symbol_Table(Head_Of(sols).n); put_line("The selected solutions : "); put(selsols); put(outfile,Length_Of(selsols),Head_Of(selsols).n,selsols); end; Close(outfile); end Main; begin Main; end grepsols;