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
-~----------~----~----~----~------~----~------~--~---

Reply via email to