我希望将数据保存到文件中,并在重新运行程序时恢复数据。
我已经定义了我的defstruct:
(defstruct bookmark:url:title:comments)
程序将简单地执行以下操作:
1.从url-db.txt加载defstruct's
2.从传入* command-line-args *的导入文件中读取并添加到内部数据var。
3.重写url-db.txt文件。
示例导入文件:
www.cnn.com |新闻|这是CNN
www.msnbc.com |搜索|
news.ycombinator.com |新闻|科技新闻
答案 0 :(得分:8)
Tom Crayford的答案很接近,但使用“pr”功能代替“print”。 “pr”产生的字符串可以通过“read”读回。
(defn save-db [db filename]
(spit
filename
(with-out-str (pr db))))
(defn load-db [filename]
(with-in-str (slurp filename)
(read)))
请注意,如果* print-dup *设置为true,则无效。请参阅ticket #176另请注意,当您重新读取数据库时,记录将是普通地图,而不是结构地图。尚未使用pr / read序列化结构图。
答案 1 :(得分:2)
使用吐痰和啜食(例如取自http://www.nofluffjuststuff.com/blog/stuart_halloway/2008/09/pcl__clojure_chapter_3_1)。通常这种技术称为序列化。
(defn save-db [db filename]
(spit
filename
(with-out-str (pr db))))
(defn load-db [filename]
(with-in-str (slurp filename)
(read)))
(早期的打印错误出现在原始代码中,我很笨,没有检查。谢谢)