从文件中读取并在向量中返回输出

时间:2014-02-17 08:21:05

标签: clojure

我正在学习clojure并尝试读取文件并使用返回的结果向量执行某些操作。在这种情况下,我只是想把它打印出来。

以下是有问题的代码:

(defn read_file
  "Read in a file from the resources directory"
  [input]
  (with-open [rdr (reader input)]
    (doseq [line (line-seq rdr)])))

(defn -main []
  (println (read_file "resources/input.txt") ))

println返回“nil”。我需要做什么才能返回“line”

2 个答案:

答案 0 :(得分:4)

如果文件不是很大,您可以使用slurp将文件内容作为字符串读取,然后将其拆分为特定的分隔符(在本例中为\n)。

(defn read-file [f]
  (-> (slurp f)
      (clojure.string/split-lines)))

答案 1 :(得分:2)

doseq返回nil。当你以do方式对序列的元素进行处理时,它应该被使用,所以大部分都是副作用。

试试这个:

(defn file->vec
  "Read in a file from the resources directory"
  [input]
  (with-open [rdr (reader input)]
    (into [] (line-seq rdr))))

但是你不应该为大文件执行此操作,在这种情况下,您不希望整个文件位于内存中。出于这个原因,slurp同样糟糕。

相关问题