Read a very large text file into a list in clojure

后端 未结 4 1350
面向向阳花
面向向阳花 2020-12-05 00:41

What is the best way to read a very large file (like a text file having 100 000 names one on each line) into a list (lazily - loading it as needed) in clojure?

Basic

4条回答
  •  再見小時候
    2020-12-05 01:09

    Andrew's solution worked well for me, but nested defns are not so idiomatic, and you don't need to do lazy-seq twice: here is an updated version without the extra prints and using letfn:

    (defn lazy-file-lines [file]
      (letfn [(helper [rdr]
                      (lazy-seq
                        (if-let [line (.readLine rdr)]
                          (cons line (helper rdr))
                          (do (.close rdr) nil))))]
             (helper (clojure.java.io/reader file))))
    
    (count (lazy-file-lines "/tmp/massive-file.txt"))
    ;=> 
    

提交回复
热议问题