From a2444ad5c216e0d1b667f7072bc203956abe48ef Mon Sep 17 00:00:00 2001 From: rich Date: Sat, 13 Aug 2005 10:10:31 +0000 Subject: [PATCH] Fix to handle the crappy not-quite-CSV files sent by Nedstat. --- csv.ml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/csv.ml b/csv.ml index a5207e7..1c0ae62 100644 --- a/csv.ml +++ b/csv.ml @@ -1,6 +1,6 @@ (* csv.ml - comma separated values parser * - * $Id: csv.ml,v 1.5 2005-02-17 15:51:47 rich Exp $ + * $Id: csv.ml,v 1.6 2005-08-13 10:10:31 rich Exp $ *) (* The format of CSV files: @@ -94,7 +94,7 @@ let load_rows ?(separator = ',') f chan = if c != '\r' then ( (* Always ignore \r characters. *) match !state with StartField -> (* Expecting quote or other char. *) - if c = '\"' then ( + if c = '"' then ( state := InQuotedField; field := [] ) else if c = separator then (* Empty field. *) @@ -115,12 +115,12 @@ let load_rows ?(separator = ',') f chan = ) else field := c :: !field | InQuotedField -> (* Reading chars to end of field. *) - if c = '\"' then + if c = '"' then state := InQuotedFieldAfterQuote else field := c :: !field | InQuotedFieldAfterQuote -> - if c = '\"' then ( (* Doubled quote. *) + if c = '"' then ( (* Doubled quote. *) field := c :: !field; state := InQuotedField ) else if c = '0' then ( (* Quote-0 is ASCII NUL. *) @@ -131,6 +131,9 @@ let load_rows ?(separator = ',') f chan = else if c = '\n' then ( (* End of field and end of row. *) end_of_field (); end_of_row () + ) else ( (* Bad single quote in field. *) + field := c :: '"' :: !field; + state := InQuotedField ) ); (* end of match *) loop () -- 1.8.3.1