-module(fold_lines). -export([count_lines/1, count_tbray_matches/1]). int_fold_lines(Device, Kons, Result) -> case io:get_line(Device, "") of eof -> file:close(Device), Result; Line -> NewResult = Kons(Line, Result), int_fold_lines(Device, Kons, NewResult) end. fold_file_lines(FileName, Kons, Knil) -> {ok, Device} = file:open(FileName,[read]), int_fold_lines(Device, Kons, Knil). count_lines(FileName) -> fold_file_lines(FileName, fun(_Line, Acc) -> Acc + 1 end, 0). count_tbray_matches(FileName) -> fold_file_lines(FileName, fun(_Line, Acc) -> match_tbray_pattern(_Line, Acc) end, 0). match_tbray_pattern(Line, Acc) -> Uri = list_to_binary(lists:nth(7, string:tokens(Line, " "))), case match_tbray_uri(Uri) of true -> Acc + 1; false -> Acc end. match_tbray_uri(<< "/ongoing/When/", Trailer/binary >>) -> Last = binary_to_list(Trailer), lists:member($., Last); match_tbray_uri(_) -> false.