Much simpler, although I'm still seeing the following exception, unless I
keep the form (str [msg sig-strs]):

IOException Stream closed  java.io.BufferedReader.ensureOpen
(BufferedReader.java:115)

Any ideas why?


On Mon, May 27, 2013 at 5:44 PM, Sean Corfield <seancorfi...@gmail.com>wrote:

> Just use doall:
>
> (doall [msg sig-strs])
>
> No need for the let / result / promise / deliver.
>
> On Mon, May 27, 2013 at 5:32 PM, Elango Cheran <elango.che...@gmail.com>
> wrote:
> > Hi everyone,
> > I had a function that reads the contents of a file (in this case, it
> > represents a license) and then verifies the contents.
> >
> > As I started to expand the code for verifying, it made sense to break the
> > function up into a function for file parsing and a function for
> > verification.  The following is the function that I created to return the
> > contents of the file parsing:
> >
> > (defn- lic-file-msg-sigs
> >   "return a vector containing the original license string/message and a
> seq
> > of each signature line generated. the input is the string of the entire
> > license file"
> >   [lic-file-str]
> >   (let [result (promise)]
> >     (with-open [rdr (BufferedReader. (StringReader. lic-file-str))]
> >       (let [lines (line-seq rdr)
> >             line-sandwich-middle-fn (fn [lines line-before line-after]
> >                                          (->> lines
> >                                               (drop-while #(not (re-find
> > (re-pattern line-before) %)))
> >                                               rest
> >                                               (take-while #(not (re-find
> > (re-pattern line-after) %)))))
> >             msg-lines (line-sandwich-middle-fn lines LICENSE-BEGIN
> > LICENSE-END)
> >             sig-strs (line-sandwich-middle-fn lines SIGNATURE-BEGIN
> > SIGNATURE-END)
> >             msg (clojure.string/join \newline msg-lines)]
> >         (str msg sig-strs) ;; need to realize the values to force file
> >         ;; parsing before file is closed. couldn't figure out how to
> >         ;; force realization except for the str function
> >         (deliver result [msg sig-strs])))
> >     @result))
> >
> >
> > My question is related to the comments towards the end -- is there a
> better
> > way to force the realization of the contents of the line-seq before I
> > deliver it?
> >
> > (If there is a better way to write this code, let me know....  In case
> you
> > are wondering, I wanted to use line-seq for parsing the file so that I
> get
> > the contents of the lines in between special sentinel lines.  line-seq
> > requires a reader, and readers are best used with with-open.  But
> with-open
> > closes the reader object at the end of its scope, so any code using the
> > contents of the reader need to be realized before the reader is closed.
>  In
> > order to return the contents outside of the with-open form, I used a
> promise
> > & deliver.)
> >
> > Thanks,
> > Elango
> >
> > --
> > --
> > 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
> > Note that posts from new members are moderated - please be patient with
> your
> > first post.
> > To unsubscribe from this group, send email to
> > clojure+unsubscr...@googlegroups.com
> > For more options, visit this group at
> > http://groups.google.com/group/clojure?hl=en
> > ---
> > You received this message because you are subscribed to the Google Groups
> > "Clojure" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to clojure+unsubscr...@googlegroups.com.
> > For more options, visit https://groups.google.com/groups/opt_out.
> >
> >
>
>
>
> --
> Sean A Corfield -- (904) 302-SEAN
> An Architect's View -- http://corfield.org/
> World Singles, LLC. -- http://worldsingles.com/
>
> "Perfection is the enemy of the good."
> -- Gustave Flaubert, French realist novelist (1821-1880)
>
> --
> --
> 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
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to