我知道如何使用[clojure.data.csv]
來寫入CSV但是我不知道如何以這種特定格式編寫CSV。Clojure將2d數組寫入csv
我想寫入CSV的數據是使用[clojure.java.jdbc]
與as-arrays? true
改性劑,它返回一個二維陣列的DB查詢的結果,其中[0][1]
是需要成爲CSV的headers
然後[x][y]
將成爲所述column names
要寫入這些標題的數據,因此[1][0]
會將第一個返回的行和第0列寫入第一個標題下的CSV。
(with-open [out-file (io/writer "out-file.csv")]
(csv/write-csv out-file
[["abc" "def"]
["ghi" "jkl"]]))
以上是寫入CSV文件的示例,但我不確定如何使用我的查詢結果並將值寫入CSV。
的數據將是這樣的:
[[header1, header2, header3]
[val1, val2, val3]
[val1, val2, val3]]
查詢看起來是這樣的:
(j/query db ["$SOME_QUERY"] as-arrays? true))
有人可以有幫助呢?
編輯:更新這是我到目前爲止有:
(defn write-query-to-csv [query db output-filename]
(log/info (str "Executing " query " on " db))
(let [results (j/query db ["$QUERY"]
:as-arrays? true)
header (->> results
first)
data (->> results)]
(with-open [out-file (io/writer output-filename)]
(csv/write-csv out-file
(reduce conj (conj [] header) data)))
(io/file output-filename)))
頭數據是正確的,但我不能確定如何填充數據variabale:/
's/FILL THIS IN/rest /'? – cfrick
@cfrick這是一個壞的複製粘貼從我,它不應該在那裏! –
在我看來,數據是一系列的序列,在'let'中拉出頭部序列,但不要將其從數據中剝離。所以現在'header'包含一系列標題標籤,'data'包含標題序列加數據序列(每行一個序列)。 'reduce'行將頭部序列重新添加到序列序列中 - 現在它包含兩個頭部序列。它看起來好像'let'只需要綁定'result',然後你可以不加修改地傳遞'result'作爲'write-csv'的第二個參數。而已。我誤解了什麼嗎? – Mars