Clojure从文件中读取对象并提取数据

时间:2015-07-27 16:03:34

标签: clojure

我对关闭非​​常新,所以我不完全确定如何做到这一点。如果我的文件data.txt包含以下内容:

[
{:name "Steve"}
{:name "Issac"}
{:name "Lucas"}
{...}
]

我希望能够读取每个:name标记的内容并使用返回值执行某些操作(在这种情况下,它将打印到控制台)。我在网上查了一下,发现有一个名为reader的方法,我知道如何打开文件。

Closure语法让我感到困惑,所以我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

应该有两种可能性:

1)通过clojure.core / read-string

生成clojure
(read-string  "['q 2 \"test\"]")
;; [(quote q) 2 "test"]

2)通过clojure.edn / read-string

(clojure.edn/read-string "['q 2 \"test\"]")
;; ['q 2 "test"]

第二个应该更快更安全(但不是eval和东西), 但仅适用于edn格式(这是clojure代码的子集)

字符串dummy(即来自你的data.txt)

;; a string, just for demo
(def s "[{:name \"Steve\" email: \"foo@bar.com\" }
         {:name \"Issac\"}
         {:name \"Lucas\"}]")

其余部分是普通的clojure,如果你遇到clojure地图有问题here是文件

(doseq [name (map :name (clojure.edn/read-string s))]
  (println name))
;; Steve
;; Issac
;; Lucas
;; nil