From: "Liam R E Quin", Date: 04/08/2009 03:21, Wrote:

> On Mon, 2009-08-03 at 12:45 -0400, Tristan Van Berkom wrote:
>> Currently its pretty easy using g_file_get_contents()/g_strsplit()
> CSV files are not just comma separated, and in some cases can have
> column headers and other metadata. There's also escaping.
> 
> a,b,c\d,e
> a,b,"c,d",e
> a;b;c,d;e

This would have been worth mentioning on the original post...  ;)


> You also have to deal with differing line ending conventions.

GIO should be able to handle that, I'd have thought...  Even if it doesn't, 
read the file, and look for a column separator, or NL or CR.  If you get an NL 
or CR, ignore any that follow it and send the line so far where it belongs.


> It's enough of a mess that both MS Office and most other
> office programs today seem o use XML instead :-)
> Probably gnumeric has code for this, though.

If it's coming form OO or Excel or something, and/or you need to be able to 
read arbitrary CSV files, then one of the ones that were suggested would likely 
do.

But if you know what you've got, it's probably easier to do it yourself anyhow. 
 CSV isn't generally a particularly complex grammar, so all it usually takes is 
a cell parser that returns the first character that's not part of the cell.  
(It'll be either the cell separator, or the end of the line.)  And if the 
parser you're using doesn't quote match the grammar you've got to parse, then 
you can get through all that work and find you've got to go back to the start 
and do it all yourself anyhow, or spend three times as long trying to hack in 
special cases and pre-parsing and what-not.

If the columns have strict formatting (like number, string, etc.), then a bunch 
of small cell parsers called in sequence will do it.  Otherwise a generic cell 
parser that checks for and handles quoting and escaping is all that's needed.  
I've usually found it easier than fiddling with generic parsers.  Even if the 
file has cell headings at the top, and columns can be re-arranged, just build 
an array with the parser to use for a given column, the location to stick the 
data in, and off you go.


Fredderic


------------------------------------------------------------
Business Phone System
Easy-to-use, advanced features, flexible phone systems.  Click here for more 
info.
http://tagline.excite.com/fc/FgElN1g6lTcPNXG8AoX53n1t2Y8ZxhVbs9YEJb7rPSWZfoPOyYrLbFazctC/
_______________________________________________
gtk-list mailing list
gtk-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to