Re: It's actually not that hard
"Are you suggesting using CSVs because they are "standard"?"
No of course not, I'm suggesting that because in 99% of the cases it can be done in a very simple way. Often you don't need the ability to have the delimiter character in your data fields, you can simply replace it with another character or reject that input as invalid.
For example if you just have nummerical values, scanf can easily read that for you. With slightly more effort it can also read space delimited colums of strings.
Even if you need arbitrary data, there are way simpler ways then the "Windows CSV". Just use no quoting and add an escape character. That way your parser only needs to read in the input character by character and only have 2 modes. The first is the normal mode, the second is the "after escape character" mode.
One of the worst examples for how you can mess up a simple format is probably the "Windows CSV" which adds things like quoting which makes parsing very hard.
XML and JSON may have their advantages for complex and dynamic data structures. However one rarely needs that. Relying on standards is not always a good idea, particulary when you need more code to use a separate library than an implementation of your own parser would need.
A good summary of the state of the art is here:
http://www.catb.org/~esr/writings/taoup/html/ch05s02.html