【发布时间】:2013-11-07 20:05:24
【问题描述】:
到目前为止我有:
(:require [clojure-csv.core :as csv])
(:require [clojure.java.io :as io]))
(def csv-file (.getFile (clojure.java.io/resource "verbs.csv")))
(defn process-csv [file]
(with-open [rdr (io/reader file)]
(csv/parse-csv rdr)))
但我收到了java.io.IOException: Stream closed。我正在使用clojure-csv,它公开了两种方法,我使用的第一种方法是parse-csv,文档说:
Takes a CSV as a char sequence or string, and returns a lazy sequence of vectors of strings
我想我知道:with-open 是懒惰的,(csv/parse-csv rdr))) 中的 rdr 是 csv 文件的单行,对吗?
PS。我也想搜索文件,重复打开文件(即使它正在被懒惰地读取)并搜索整个内容是否很昂贵??
【问题讨论】:
-
如下所示,with-open 不是惰性的,但 parse-csv 是。 parse-csv 将惰性返回输入 csv 中的每个值,作为惰性向量列表(每行一个向量)。