Создать CSV из вектора в Clojure - PullRequest
2 голосов
/ 07 июля 2011

У меня есть

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

Я хочу создать CSV-файл, содержащий 2 строки из этого вектора

John,123
Ashwani,456

Я могу получить этот результат на консоли, используя доза

(doseq [x e]
  ( println (x :title) ","  (x :year)  ))

Я пытаюсь использовать clojure.contrib.duck-streams/spit для создания этого CSV, но я не в состоянии перебрать мысль и создать строку и передать ее, чтобы плюнуть.

Каков наилучший способ достичь этого. Я надеялся придумать некоторую функцию Reduce, а затем передать ее, чтобы плюнуть и создать этот CSV. (В C # я бы открывал поток и записывал каждую строку, а в конце закрывал поток и сохранял файл, и мой мозг заставлял меня мыслить так, но я уверен, что для этого должен быть какой-то функциональный способ) *

1 Ответ

2 голосов
/ 07 июля 2011

Вы могли бы сделать это с помощью редукции и утиных потоков / слюны.

Но, вероятно, лучше использовать утки-потоки / записи-строки. Таким образом, вам не нужно беспокоиться об использовании правильного O / S-зависимого разделителя строк.

(use 'clojure.contrib.duck-streams)

(write-lines f
  (map #(str (% :title) ","  (% :year)) e))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...