我想使用clojure从文件中读取前n行。这是我的代码:
[OriginalTable]
但是当我跑步时
(defn read-nth-line [file]
(with-open [rdr (reader file)]
(loop [line-number 0]
(when (< line-number 20)
(nth (line-seq rdr) line-number)
(recur (inc line-number))))))
我不知道为什么会出现这样的错误。
答案 0 :(得分:19)
您的代码会产生越界错误,因为您在同一个阅读器上多次调用line-seq
。如果你想从阅读器获得一些行,你应该只调用line-seq
一次,然后从该序列中获取所需的行数:
(require '[clojure.java.io :as io])
(defn lines [n filename]
(with-open [rdr (io/reader filename)]
(doall (take n (line-seq rdr)))))
示例:
(run! println (lines 20 "test.txt"))
如果test.txt
包含少于20行,则只会打印文件中的所有行。