% Prolog(2/2)

g115(File,X) :-
  open(File,read,Input),
  findall(W,(repeat,get_line(Input,U),(U=end_of_file,!,fail;cut115(U,W)),X),
  close(Input).

p115(File,L) :-
  open(File,write,Output),
  ( member(U,L),
   concat_atom(U,X),
   write_formatted(Output,'%t\n',[X]),
   fail;
   close(Output)
  ).

cut115(A,[A1,A2]) :- sub_atom(A,0,4,R,A1),subatom(A,4,R,_,A2).

% Library Utility
get_line(Stream,X) :-
  findall(C,(repeat,get_char(C),(X='\n',!,fail;true)),X).
  concat_atom(L,X).

concat_atom([A],A).
concat_atom([A|R],X) :- concat_atom(R,Y),atom_concat(A,Y,X).