在Clojure中从Vector创建CSV

时间:2011-07-06 23:38:07

标签: clojure

我有这个

(defstruct book :title :year)
(def e [
        (struct book "John" 123)
        (struct book "Ashwani" 456)
        ])

我想创建一个CSV文件,该文件有2行来自此Vector

John,123
Ashwani,456

我可以使用doseq

在控制台上生成此结果
(doseq [x e]
  ( println (x :title) ","  (x :year)  ))

我正在尝试使用clojure.contrib.duck-streams/spit来创建此CSV,但我无法迭代思考并创建字符串并将其传递给spit。

实现这一目标的最佳方法是什么。我希望得到一些reduce函数,然后将它传递给spit并创建这个csv。 (在C#中我会打开一个流并写下每一行,最后关闭流并保存文件,我的大脑让我以foreach的方式思考,但我确信必须有一些功能性的方法来实现这一点)

1 个答案:

答案 0 :(得分:2)

你可以使用reduce和duck-streams / spit来实现。

但最好使用duck-streams / write-lines。这样您就不必担心使用正确的O / S依赖行分隔符了。

(use 'clojure.contrib.duck-streams)

(write-lines f
  (map #(str (% :title) ","  (% :year)) e))