我有这个
(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的方式思考,但我确信必须有一些功能性的方法来实现这一点)
答案 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))