将文件读入列表,每个元素代表文件的一行

ftr*_*ers 3 file-io clojure

在clojure中,如何将文件读入序列,其中每行是序列中的一个元素.所以我想看看函数的定义,get-lines所以我可以做以下事情:

(def lines (get-lines "test.txt"))
Run Code Online (Sandbox Code Playgroud)

和行是一个非惰性序列.

Ret*_*ief 10

替代实施:

(require ['clojure.string :as 'str])

(defn get-lines [file]
  (str/split-lines (slurp file)))
Run Code Online (Sandbox Code Playgroud)

此函数返回结果的向量而不是seq.

如果您不使用1.3,请改为使用clojure.contrib.string.


Mis*_*hor 8

要将惰性序列转换为非惰性,您可以doall像这样使用:

(use 'clojure.java.io)

(defn get-lines [fname]
  (with-open [r (reader fname)]
    (doall (line-seq r))))
Run Code Online (Sandbox Code Playgroud)