2016-02-18 43 views
-1

我有這樣的我該如何逐行寫入EDN? (吐,包含HashMap的SEQ)

tab = ({"123" data} {"456" data} ... 

數據(無論,它是包含HashMap的懶惰序列)。

我希望它被寫入到由線的EDN文件中的行,所以我做了這個

(map (fn[x] (spit "test.edn" x :append true)) tab) 

的問題是,我想有這樣的文件:

{"123" data} 
{"456" data} 

但它似乎追加像

{"123" data}{"456" data} 

有沒有辦法解決這個問題的方法嗎? 我想我必須添加「換行符」,但我不知道該怎麼做,因爲輸入不是字符串。

謝謝!

回答

1
(doseq [x tab] 
    (spit "test.edn" (prn-str x) :append true)) 

所以,在tab每個項目,將其轉換爲可讀的字符串後跟一個換行符,那麼該字符串追加到test.edn

你不應該使用map此的一對夫婦的原因:

  1. map是懶惰的,除非你強迫它
  2. map因此不會打印整個序列保留序列的頭,這隻會浪費內存
+0

謝謝!還沒有嘗試過,因爲我的東西正在工作,但會看看我的最終計劃將改善工作! –

1

對不起,我終於找到它了,希望它能幫助一些人在網上找不到它(我的意思是沒有簡單的答案)。

(map (fn[x] (spit "test.edn" (str x "\n") :append true)) tab) 

下午好。

+1

你應該使用'pr-str'而不是'str'。例如,它會正確地使用'nil'。 – ClojureMostly

+0

doseq更好,因爲吐是一個副作用功能 –