如何逐行编写 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? (吐,哈希图的序列)的主要内容,如果未能解决你的问题,请参考以下文章

如何“忽略”哈希图的模板参数?

如何在 javascript 中检查此布尔哈希图是不是为空? [复制]

如何从它们插入哈希图中的顺序打印哈希图值

如何将哈希图转换为条目数组[重复]

如何使用意图将哈希图值发送到另一个活动

如何按整数值对哈希图进行排序[重复]