如何逐行编写 EDN? (吐,哈希图的序列)
Posted
技术标签:
【中文标题】如何逐行编写 EDN? (吐,哈希图的序列)【英文标题】:How can I write an EDN line by line? (spit, seq of hashmaps) 【发布时间】:2016-02-18 11:41:31 【问题描述】:我有这样的数据
tab = ("123" data "456" data ...
(无论如何,它是一个惰性哈希图序列)。
我想把它逐行写入一个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
:
map
是惰性的,因此不会打印整个序列,除非你强制它
map
保留序列的头部,这里只会浪费内存
【讨论】:
谢谢!还没有尝试过,因为我的东西正在运行,但会看看我的最终程序何时可以改进!【参考方案2】:对不起,我终于找到了,希望对某些人有所帮助,因为我在互联网上没有找到它(我的意思是没有简单的答案)。
(map (fn[x] (spit "test.edn" (str x "\n") :append true)) tab)
下午好。
【讨论】:
您应该使用pr-str
而不仅仅是str
。例如,它可以与nil
一起正常工作。
doseq 更好,因为 spit 是一个副作用函数以上是关于如何逐行编写 EDN? (吐,哈希图的序列)的主要内容,如果未能解决你的问题,请参考以下文章