如何将我的defstruct保存并恢复到文件?

时间:2009-08-18 04:12:54

标签: clojure

我希望将数据保存到文件中,并在重新运行程序时恢复数据。

我已经定义了我的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 |新闻|科技新闻

2 个答案:

答案 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)))

(早期的打印错误出现在原始代码中,我很笨,没有检查。谢谢)