Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在clojure中从文件中读取n行_Clojure - Fatal编程技术网

如何在clojure中从文件中读取n行

如何在clojure中从文件中读取n行,clojure,Clojure,我想使用clojure读取文件的前n行。这是我的密码: (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)))))) 我不知道为什么会出现这样的错

我想使用clojure读取文件的前n行。这是我的密码:

(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))))))

我不知道为什么会出现这样的错误。

您的代码会产生越界错误,因为您在同一个读卡器上多次调用
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行,则只需打印文件中的所有行。

是否
test.txt
包含的行数超过20行?是否可以将要求添加到问题中?我喜欢能够将粘贴代码复制到REPL:(require'[clojure.java.io:refere[reader]])您能将require添加到您的答案中吗?我喜欢能够将粘贴代码复制到REPL中(需要'[clojure.java.io:refere[reader]]]@michielworkent-Sure;我只是想模仿OP的风格。我添加了一个带有别名的
require
,因为我更喜欢在可行时使用
:as
而不是
:refere
(run! println (lines 20 "test.txt"))