Hmmm... it sounds like there would be use for a "string table utils"
or something like that.

On May 14, 11:12 am, Daniel Lyons <fus...@storytotell.org> wrote:
> On May 14, 2009, at 7:14 AM, Stuart Halloway wrote:
>
>
>
> > FYI: I am working on an open-source CSV parser in Clojure. Splitting
> > on delimiters is rarely enough in my experience.
>
> That would be wonderful. I have wrapped OpenCSV for my own purposes  
> but would of course prefer not having another library dependency. My  
> code wound up like this:
>
> (import 'java.io.FileReader 'au.com.bytecode.opencsv.CSVReader))
>
> (defn read-csv [filename]
>    (let [reader (CSVReader. (FileReader. filename))]
>      (map vec (take-while identity (repeatedly #(.readNext reader))))))
>
> I'd welcome anyone's remarks about that.
>
> One thing I have in my CSV toolkit which might be of general utility  
> is a function which reads the first row sans '#' as column names and  
> returns hashes. So if you have this CSV file:
>
> #name,age,language
> Daniel,27,Clojure
> David,26,Python
>
> You get this seq as a result: ({:name "Daniel", :age "27", :language  
> "Clojure"} {:name "David", :age "26", :language "Python"})
>
> I'm not quite sure what to call such a function, and I find this  
> function's implementation seriously ugly. I'd appreciate anyone's  
> feedback to clean it up.
>
> (defn csv->relation
>    "Parses a CSV file and returns a seq of dictionaries."
>    [filename]
>    (let
>        [data (read-csv filename)
>         [[pre-col1 & columns] & rows] data
>         col1 (if (= \# (.charAt pre-col1 0)) (.substring pre-col1 1)  
> pre-col1)
>         headers (map keyword (cons col1 columns))]
>      (map #(apply
>            hash-map
>            (mapcat list headers %))
>          rows)))
>
> Thanks,
>
> —
> Daniel Lyonshttp://www.storytotell.org-- Tell It!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to