Data-Table and CL-CSV


I have quite a few database driven web applications that make heavy use of tabular imports and exports (from their primary database, other databases, and exterior data sources (eg: CSVs). This data structure provides column, row, and cell access to getting and setting values, as well as providing functionality to create composite data-tables by retrieving and combining subsections of existing data-tables. This library also aims to ease type coercion from strings to common-lisp types.


I had many scattered, not well tested, not easily runnable pieces of CSV code. I was unhappy with this situation, then decided to refactor all of this into a single project. I wrote tests for it and had a library so I thought I might release it. This project started as extensions and bugfixes on arnesi’s CSV.

I then looked around and saw there are other CSV libraries out there that probably mostly accomplished what I had set out to do. However, I already had my code that was tested, had an easier license (BSD), and provided a framework to interact with my other libraries and systems, so I figured why not just release it anyway.

The only interesting code in this library (to me) is that I managed to make the read/write-csv functions accept a string, pathname, or stream as the first argument and I managed to make sure that streams get closed if these functions created them (file streams for example), but not if the stream was passed in. Nothing great, but I had fun writing it.

Other niceties I would like to continue to build out in this library is its integration with other related libs (like CLSQL). I have code to handle exporting database queries as CSVs as well as code to handle importing CSVs into databases both serially and in bulk. I also use data-tables to have a lisp representation of the just parsed data-table and to coerce that table of string values into relevant common-lisp types.

4 thoughts on “Data-Table and CL-CSV

  1. Any chance of considering postmodern as well as clsql? I know, give us one little thing and we expect the moon.

  2. I would love to support postmodern, but I don’t use it much so I have not spent much time looking into this. I don’t think it would be difficult to implement though.

    Any patches that came through would gratefully be accepted :)

  3. I’m getting the error: “we are reading non quoted csv data and found a quote at 1”
    no matter what I do. SBCL on windows xp (yeah, yeah, laugh all you want, tell my boss).
    I know the data is quoted, I want it to be quoted, *quote* is set correctly, so is *always-quote* so why does it think it’s non quoted?

Leave a Reply

Your email address will not be published. Required fields are marked *