Sample code for reading a CSV file
Bob Sneidar
bobs at twft.com
Thu Feb 17 16:07:08 EST 2011
Nicely done! I know good software that cannot do this efficiently.
Bob
On Feb 17, 2011, at 11:48 AM, Nonsanity wrote:
> 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 <paul at 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 at 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 at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list