I did try the line-seq and it didn't run out of memory and I used a surrounding with-open and it works great now. Thanks Stephen!
On Wed, Nov 12, 2008 at 4:14 PM, Brian Doyle <[EMAIL PROTECTED]> wrote: > In your example using line-seq, should really surround it with the > with-open function so that it will close the reader? Thanks. > > > On Wed, Nov 12, 2008 at 4:02 PM, Stephen C. Gilardi <[EMAIL PROTECTED]>wrote: > >> >> >> On Nov 12, 2008, at 5:20 PM, Brian Doyle wrote: >> >> > It works great for me, but hoping to get any feedback >> > about coding style or there is already something out >> > there that does such a thing or whatever. Thanks. >> > >> > (defn chunk-file >> > "Takes a file, number of lines, a function and args. >> > Reads in line-size from the file and passes each line >> > and the args to the given function." >> > ([file line-size f & args] >> > (with-open r file >> > (loop [l (.readLine r) >> > tlines []] >> > (let [end? (nil? l) >> > lines (if (not end?) (conj tlines l) tlines) >> > chunk? (zero? (rem (count lines) line-size))] >> > (if (or chunk? end?) >> > (do >> > (doseq line lines (apply f line args)) >> > (if (not end?) >> > (recur (.readLine r) []))) >> > (recur (.readLine r) lines))))))) >> >> >> A few quick comments: >> >> - When you only have one set of arguments, you can skip the pair of >> parens that start before the argument vector >> >> - Clojure has "line-seq". It returns a lazy sequence of lines read >> from a reader. To use it with a file, you can use code like this: >> >> (ns my-ns >> (:import (java.io BufferedReader FileReader))) >> >> (defn file-lines >> [file-name] >> (line-seq (BufferedReader. (FileReader. file-name)))) >> >> (doseq line (file-lines my-file) >> ...) >> >> - I usually see names with ? after being functions rather than flags. >> (end?) >> >> --Steve >> >> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---