从Clojure中的矢量创建CSV
我有这个从Clojure中的矢量创建CSV,clojure,Clojure,我有这个 (defstruct book :title :year) (def e [ (struct book "John" 123) (struct book "Ashwani" 456) ]) 我想创建一个CSV文件,其中包含来自此向量的2行 John,123 Ashwani,456 我可以使用doseq在控制台上生成此结果 (doseq [x e] ( println (x :title) "," (x :year) )) 我
(defstruct book :title :year)
(def e [
(struct book "John" 123)
(struct book "Ashwani" 456)
])
我想创建一个CSV文件,其中包含来自此向量的2行
John,123
Ashwani,456
我可以使用doseq在控制台上生成此结果
(doseq [x e]
( println (x :title) "," (x :year) ))
我试图使用clojure.contrib.duck streams/spit
创建此CSV,但我无法迭代思想并创建字符串并将其传递给spit
实现这一目标的最佳方式是什么。我希望提出一些reduce函数,然后将其传递给spit并创建这个csv。(在C#中,我会打开一个流并写下每一行,最后关闭流并保存文件,我的大脑让我以每一种方式思考,但我确信一定有某种功能性的方法来实现这一点)你可以用reduce和duck streams/spit来完成 但是使用duck流/写行可能更好。这样,您就不必担心使用正确的O/S相关行分隔符
(use 'clojure.contrib.duck-streams)
(write-lines f
(map #(str (% :title) "," (% :year)) e))
CSV并不像您想象的那么简单,例如,如果字符串中包含逗号,则需要引用字符串。最好看看clojure的csv阅读器/作者,例如,@Allex Ott-谢谢。在我的场景中,它不会,但您提供的链接对我的最终解决方案非常有帮助