gpt4 book ai didi

clojure - 使用 doseq 读取文件直到 Clojure 中的特定行

转载 作者:行者123 更新时间:2023-12-02 05:41:36 25 4
gpt4 key购买 nike

这在其他语言中通常是微不足道的,但我在 Clojure 中找不到这样的例子。

我可以使用以下方法打印整个文件:

(with-open [rdr (io/reader "file")]
(doseq [line (line-seq rdr) :while (< count(line) 10)]
(println line)))

但是如何让它在第 5 行停止呢?

谢谢。

最佳答案

你可以试试这个:

(println
(with-open [rdr (clojure.java.io/reader "file")]
(let [ls (line-seq rdr)]
(doall (take 5 ls)))))

这将打印指定文件的前 5 行。

如果需要跳过一些不满足条件的行,可以添加filter。以下代码将打印长度小于 10 的前五行。

(println
(with-open [rdr (clojure.java.io/reader "file")]
(let [ls (line-seq rdr)]
(->> ls
(filter #(< (count %) 10))
(take 5)
(doall)))))

由于filtertake返回惰性序列,所以应该在with-open形式内实现。在with-open形式之外,序列无法实现,导致异常。

println函数也实现了序列化,可以这样修改代码:

(with-open [rdr (clojure.java.io/reader "data/base_exp.txt")]
(let [ls (line-seq rdr)]
(->> ls
(filter #(> (count %) 10))
(take 5)
(println))))

关于clojure - 使用 doseq 读取文件直到 Clojure 中的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30210461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com