-module(test). -compile(export_all). for_each_line(Filename, [_, {encoding, Encoding}]=Mode, F, Args) -> io:setopts([{encoding, Encoding}]), case file:open(Filename, Mode) of {ok, Device} -> F(Device, Encoding, Args); {error, Reason} -> erlang:error(Reason) end. tokens(Device, Encoding, N) -> case io:get_line(Device, "") of {error, Reason} -> erlang:error(Reason), file:close(Device); eof -> file:close(Device); Line -> Tokens = string:tokens(Line, " "), lists:foreach( fun(T) -> io:format("~ts~n", [T]) end, Tokens ), tokens(Device, Encoding, N) end. main(_) -> for_each_line("test1.txt", [read, {encoding, utf8}], fun test:tokens/3, 1).