Here's a generalized case that returns an array, with or without the quotes, and that allows for commas and returns inside the quotes to remain part of that element. It also preserves backslash-escaped quotes in any element, quoted or not.
function CSVtoArray csv, removeQuotes, preserveEscapedQuotes if preserveEscapedQuotes is empty then put true into preserveEscapedQuotes set itemdel to quote if preserveEscapedQuotes then replace ("\""e) with numtochar(3) in csv repeat with b = 1 to the number of items in csv if trunc(b/2) = (b/2) then replace return with numtochar(1) in item b of csv replace comma with numtochar(2) in item b of csv end if end repeat set itemdel to comma repeat with a = 1 to the number of lines in csv put line a of csv into theline repeat with b = 1 to the number of items in theline get item b of theline replace numtochar(1) with return in it replace numtochar(2) with comma in it if removeQuotes then replace quote with "" in it if preserveEscapedQuotes then replace numtochar(3) with quote in it put it into o[a][b] end repeat end repeat return o end CSVtoArray The 2nd and 3rd parameters are optional, with expected settings as default. (Leave quotes on the strings, and DO preserve escaped quotes.) It doesn't allow StartOfHeading, StartOfText, or EndOfText characters to be in the source (ASCII 1, 2, and 3 respectively) but then those are non-printable characters and not likely to be there to begin with. It should be fairly speedy, though I haven't tested it with a huge input. ~ Chris Innanen ~ Nonsanity On Thu, Feb 17, 2011 at 1:16 PM, Paul Dupuis <p...@researchware.com> wrote: > So I am tired of reinventing the proverbial wheel over and over again. > > I have a new project that I want to read a CSV file for. Obviously reading > the file is easy. And is it was tab separated instead of comma, parsing out > the rows and columns is easy as well. However, with comma seperated data > where some columns contain string with commas in then that are encapsulated > in quotes, just plowing through the itemDelimiter and lineDelimter doesn't > work. > > So before I bother to write code to handle encapsulated CSV data, I thought > I'd ask if anyone on the use-list has existing code to handle CSV's that > they'd be willing to share. > > -- > Paul Dupuis > Cofounder > Researchware, Inc. > http://www.researchware.com/ > > > _______________________________________________ > use-livecode mailing list > use-livecode@lists.runrev.com > Please visit this url to subscribe, unsubscribe and manage your > subscription preferences: > http://lists.runrev.com/mailman/listinfo/use-livecode > _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode