-module(text). -export([read_line/1, read_word/2, read_date/2, read_time/2, read_price/2, read_number/2]). read_line(B) -> read_line(B, 0). read_line(B, N) -> case B of <<$\n, B2/binary>> -> read_line(B2, N); <<$\r,$\n, B2/binary>> -> read_line(B2, N); <> -> {B1, B2}; <> -> {B1, B2}; <<_:N/binary>> = B -> {B, <<>>}; <<_:N/binary, _/binary>> = B -> read_line(B, N + 1) end. read_word(B, Sep) when is_binary(B) -> read_word(B, Sep, 0). read_word(B, Sep, N) -> case B of <<_:N/binary, Sep, _/binary>> -> <> = B, {B1, B2}; <<_:N/binary>> -> {B, <<>>}; _ -> read_word(B, Sep, N + 1) end. read_date(B, Sep) -> {B1, B2} = read_word(B, Sep), Date = list_to_integer(binary_to_list(B1)), {Date, B2}. read_time(B, Sep) when is_binary(B) -> {B1, B2} = read_word(B, Sep), Time = read_time(binary_to_list(B1), []), {Time, B2}; read_time([], Acc) -> list_to_integer(lists:reverse(Acc)); read_time([$:|T], Acc) -> read_time(T, Acc); read_time([H|T], Acc) -> read_time(T, [H|Acc]). read_price(B, Sep) -> {B1, B2} = read_word(B, Sep), case io_lib:fread("~f", binary_to_list(B1)) of {ok,[Price],[]} -> {Price, B2}; _ -> {ok,[Price],[]} = io_lib:fread("~d", binary_to_list(B1)), {Price, B2} end. read_number(B, Sep) -> {B1, B2} = read_word(B, Sep), N = list_to_integer(binary_to_list(B1)), {N, B2}.