non-lazy version:
(map #(vec (.split % ",")) (vec (.split (slurp "/tmp/foo.csv") "\n")))(["foo" "bar"] ["fu" "bor"]) On Fri, Jun 17, 2011 at 2:39 PM, octopusgrabbus <octopusgrab...@gmail.com>wrote: > Thanks for the reply. In this instance, what's the syntax for map? I'm > trying in REPL and getting a wrong number of arguments (1) passed to > core$map. > > On Jun 17, 7:11 am, Ken Wesson <kwess...@gmail.com> wrote: > > On Thu, Jun 16, 2011 at 6:07 PM, octopusgrabbus > > > > > > > > > > > > > > > > > > > > <octopusgrab...@gmail.com> wrote: > > > This Clojure program: > > > > > ns test-csv > > > (:require [clojure.contrib.string :as str]) > > > (:import (java.io BufferedReader FileReader StringReader)) > > > (:use clojure-csv.core)) > > > > > (defn process-file [file-name] > > > (with-open [br (BufferedReader. (FileReader. file-name))] > > > (println (line-seq br)))) > > > > > (defn -main [& args] > > > (process-file "resultset.csv")) > > > > > is printing a test file. I believe line-seq returns a sequence of > > > strings. I am having trouble figuring out where to call str/split. The > > > error I'm getting back is you can cast to a regular expression. Any > > > thoughts? > > > > The split function takes a regular expression for its split-with-this > > argument, rather than a regular string. In many cases simply changing > > a string literal to a regex literal will do, e.g. with CSV splitting > > "," to #",". > > > > If you (map #(split...) (line-seq foo)) on your CSV data you'll end up > > with a seq of seqs of strings, each outer seq a row and each inner seq > > the cells of that row. If there are escaped embedded commas in some of > > the cell value strings they'll still be escaped, however it is that > > they are escaped, though, so you might want to put the whole thing > > through (map #(map unescape %) outer-seq) to unescape everything after > > the splitting; implementing the unescape function is left as an > > exercise for the reader. :) > > > > Note that all of this stuff is lazy, so you'll want to keep the reader > > open until you've done processing everything and have a result to > > return, and if the result is a seq it may need doall called on it > > first depending on how it is constructed. On the other hand this means > > you can fairly transparently work with CSV files larger than main > > memory. > > -- > > Some people, when confronted with a problem, think “I know, I'll use > > regular expressions.” > > Now they have two problems. > > - Jamie Zawinski > > -- > 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 > Note that posts from new members are moderated - please be patient with > your first post. > 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 > -- 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 Note that posts from new members are moderated - please be patient with your first post. 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