Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- parse_file(Fn) ->
- {ok, Data} = file:read_file(Fn),
- parse(binary_to_list(Data)).
- parse(Data) -> lists:reverse(parse(Data, [])).
- parse([], Acc) -> Acc;
- parse(Data, Acc) ->
- {Line, Tail} = parse_line(Data),
- parse(Tail, [Line|Acc]).
- parse_line(Data) ->
- {Line, Tail} = parse_line(Data, []),
- {lists:reverse(Line), Tail}.
- parse_line([13,10|Data], Acc) -> {Acc, Data};
- parse_line([10|Data], Acc) -> {Acc, Data};
- parse_line([13|Data], Acc) -> {Acc, Data};
- parse_line([], Acc) -> {Acc, []};
- parse_line([$,,$,|Data], Acc) -> parse_line(Data, [""|Acc]);
- parse_line([$,|Data], Acc) -> parse_line(Data, Acc);
- parse_line(Data, Acc) ->
- {Fld, Tail} = parse_field(Data),
- parse_line(Tail, [Fld|Acc]).
- parse_field([34|Data]) ->
- {Fld, Tail} = parse_fieldq(Data, ""),
- {lists:reverse(Fld), Tail};
- parse_field(Data) ->
- {Fld, Tail} = parse_field(Data, ""),
- {lists:reverse(Fld), Tail}.
- parse_field([$,|Tail], Acc) -> {Acc, [$,|Tail]};
- parse_field([13|Tail], Acc) -> {Acc, [13|Tail]};
- parse_field([10|Tail], Acc) -> {Acc, [10|Tail]};
- parse_field([], Acc) -> {Acc, []};
- parse_field([Ch|Tail], Acc) -> parse_field(Tail, [Ch|Acc]).
- parse_fieldq([34,34|Tail], Acc) -> parse_fieldq(Tail, [34|Acc]);
- parse_fieldq([34|Tail], Acc) -> {Acc, Tail};
- parse_fieldq([Ch|Tail], Acc) -> parse_fieldq(Tail, [Ch|Acc]).
- "Type","First Name","Last Name","Email"
- "Contact","Ashwani Garg ------"All Pain Will End."","","itisashwani4u@gmail.com"
- result:-
- [["contact"],["Ashwani Garg ------"],["All Pain Will End."],[],["itisashwani4u@gmail.com"]]
- expected result:-
- [["contact"],["Ashwani Garg ------All Pain Will End."],[],["itisashwani4u@gmail.com"]]
- Affection,,,Affection,,,,,,,,+919845141544,,+919845141544,,,,,,,,,,,,,,,
- result:-
- [["Affection"],[],[],["Affection"],[],[],[],[],[],[],[],["+919845141544"],[],["+919845141544"],[],[],[],[],[],[],[]]
- expected result:-
- [["Affection"],[],[],["Affection"],[],[],[],[],[],[],[],["+919845141544"],[],["+919845141544"],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
- parse(File) ->
- {ok, F} = file:open(File, [read, raw]),
- parse(F, file:read_line(F), []).
- parse(F, eof, Done) ->
- file:close(F),
- lists:reverse(Done);
- parse(F, Line, Done) ->
- parse(F, file:read_line(F), [parse_line(Line)|Done]).
- parse_line(Line) -> parse_line(Line, []).
- parse_line([], Fields) -> lists:reverse(Fields);
- parse_line("," ++ Line, Fields) -> parse_field(Line, Fields);
- parse_line(Line, Fields) -> parse_field(Line, Fields).
- parse_field(""" ++ Line, Fields) -> parse_field_q(Line, [], Fields);
- parse_field(Line, Fields) -> parse_field(Line, [], Fields).
- parse_field("," ++ _ = Line, Buf, Fields) -> parse_line(Line, [lists:reverse(Buf)|Fields]);
- parse_field([C|Line], Buf, Fields) -> parse_field(Line, [C|Buf], Fields);
- parse_field([], Buf, Fields) -> parse_line([], [lists:reverse(Buf)|Fields]).
- parse_field_q(Line, Fields) -> parse_field_q(Line, [], Fields).
- parse_field_q("""" ++ Line, Buf, Fields) -> parse_field_q(Line, [$"|Buf], Fields);
- parse_field_q(""" ++ Line, Buf, Fields) -> parse_line(Line, [lists:reverse(Buf)|Fields]);
- parse_field_q([C|Line], Buf, Fields) -> parse_field_q(Line, [C|Buf], Fields).
- parse_file(File) ->
- {ok, Data} = file:read_file(File),
- parse(binary_to_list(Data), []).
- parse([], Done) ->
- lists:reverse(Done);
- parse(Data, Done) ->
- {Line, Rest} = case re:split(Data, "r|n|rn", [{return, list}, {parts, 2}]) of
- [L,R] -> {L,R};
- [L] -> {L,[]}
- end,
- parse(Rest, [parse_line(Line)|Done]).
- "Type","First Name","Last Name","Email"
- "Contact","Ashwani Garg ------""All Pain Will End.""","","itisashwani4u@gmail.com"
- parse(Data) -> parse(Data, [], [], []).
- parse([$r|Data], Field, Fields, Lines) -> parse_r(Data, Field, Fields, Lines);
- parse([$n|Data], Field, Fields, Lines) -> parse(Data, [], [], [[Field|Fields]|Lines]);
- parse([$,|Data], Field, Fields, Lines) -> parse(Data, [], [Field|Fields], Lines);
- parse([$"|Data], [], Fields, Lines) -> parse_q(Data, [], Fields, Lines);
- parse([C|Data], Field, Fields, Lines) -> parse(Data, [C|Field], Fields, Lines);
- parse([], Field, Fields, Lines) ->
- lists:reverse(
- [lists:reverse(
- [lists:reverse(F) || F <- L]
- ) || L <- [[Field|Fields]|Lines]]
- ).
- parse_r([$n|_] = Data, Field, Fields, Lines) -> parse(Data, Field, Fields, Lines).
- parse_q([$"|Data], Field, Fields, Lines) -> parse_qq(Data, Field, Fields, Lines);
- parse_q([C|Data], Field, Fields, Lines) -> parse_q(Data, [C|Field], Fields, Lines).
- parse_qq([$"|Data], Field, Fields, Lines) -> parse_q(Data, [$"|Field], Fields, Lines);
- parse_qq([C|_] = Data, Field, Fields, Lines)
- when C == $,; C == $r; C == $n -> parse(Data, Field, Fields, Lines);
- parse_qq([], Field, Fields, Lines) -> parse([], Field, Fields, Lines).
Add Comment
Please, Sign In to add comment