Für meine Anwendung muss ich CSV-Datei mit Erlang parsen.following ist der Code, der CSV mit Erlang parsen wird: -
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]).
dieser Code funktioniert gut, aber ich habe zwei Probleme:- 1-seit der Code parsen mit doppelten Anführungszeichen ("") und Komma (,) und trennen Sie jeden Wert..aber im folgenden Beispiel, wenn Vorname bestehen aus doppelten Anführungszeichen sting innerhalb es dann der Parser wird ein weiteres Feld erstellen.
"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"]]
2-für die folgende Art von csv seine für Wert, seine trunkieren einige Wert: - Vorname, Nachname, mittlerer Name, Name, Spitzname, E-Mail-Adresse, Straße des Wohnorts, Stadt des Wohnorts, Postleitzahl des Wohnorts, Bundesland des Wohnorts, Land/Region des Wohnorts, Telefon des Wohnorts, Fax des Wohnorts, Mobiltelefon, Persönliche Webseite, Straße des Geschäftsorts, Postleitzahl des Geschäftsorts, Bundesland des Geschäftsorts, Land/Region des Geschäftsorts, Webseite des Geschäftsorts, Telefon des Geschäftsorts, Fax des Geschäftsorts, Pager, Unternehmen, Berufsbezeichnung, Abteilung, Bürostandort, Notizen
Affection,,,Affection,,,,,,,,+919845141544,,+919845141544,,,,,,,,,,,,,,,
result:-
[["Affection"],[],[],["Affection"],[],[],[],[],[],[],[],["+919845141544"],[],["+919845141544"],[],[],[],[],[],[],[]]
expected result:-
[["Affection"],[],[],["Affection"],[],[],[],[],[],[],[],["+919845141544"],[],["+919845141544"],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
Bitte helfen Sie mir ...als Referenz verwenden Sie bitte die http://ppolv.wordpress.com/2008/02/25/parsing-csv-in-erlang/