如何为clojure中的文件中的每一行分配增量值

时间:2015-01-06 14:22:44

标签: clojure

我想读取一个文件,对于每一行,我想在文件中附加一个行号。所以结果应该像

[1 "line1"]
[2 "line2"]
[3 "line3"]

如何有效地做到这一点?

2 个答案:

答案 0 :(得分:3)

这是line-seq的一个很好的用例。

(require '[clojure.java.io :as io])
(with-open [f (io/reader (io/file "test-file"))]
  (mapv vector (next (range)) (line-seq f)))

[[1 "line1"] [2 "line2"] [3 "line3"]]

我在这里使用mapv,因为懒惰和文件句柄之类的有限资源不会混合。

答案 1 :(得分:1)

可能它不符合您的需要,但通用函数map-indexed值得了解:

(map-indexed 
   (fn [index line] [(inc index) line]) 
   (line-seq f))