Wolodja Wentland <babi...@gmail.com> writes:

> On Tue, Jul 10, 2012 at 17:16 +0200, Tassilo Horn wrote:
>> I think, I'd simply copy the clojure.xml code and adapt it to my needs.
>
>> Not too pretty, but should be adequate for getting the job done.
>
> I look into that, but it really wouldn't be pretty. I still think that
> it must be possible to add two lines (one line each at beginning/end)
> to a file that I am reading. I would know how to do that if I weren't
> working with inputstreams (which the parse functions expect me to use)
> but sequences of lines.

Hm, I think, you can use proxy to create a concatenation of input
streams.  Something like

--8<---------------cut here---------------start------------->8---
(defn concat-input-stream
  "Gets one or many input streams and returns a new input stream that
  concatenates the given streams."
   ^java.io.InputStream [^java.io.InputStream is & more]
  (proxy [java.io.InputStream] []
    (read []
      (let [input (.read is)]
        (if (and (== -1 input) (seq more))
          (.read (apply concat-input-stream (first more) (rest more)))
          input)))))

(def mystream (concat-input-stream (java.io.ByteArrayInputStream. (.getBytes 
"ab"))
                                   (java.io.ByteArrayInputStream. (.getBytes 
"cd"))
                                   (java.io.ByteArrayInputStream. (.getBytes 
"ef"))))

(repeatedly 7 #(.read mystream))
;=> (97 98 99 100 101 102 -1)
--8<---------------cut here---------------end--------------->8---

Not tested extensively, but it should work in theory.  Basically, you
would use your usual xml-parse function like

--8<---------------cut here---------------start------------->8---
(xml-parse (concat-input-stream (java.io.ByteArrayInputStream. (.getBytes 
"<root>"))
                                your-real-file-input-stream
                                (java.io.ByteArrayInputStream. (.getBytes 
"</root>"))))
--8<---------------cut here---------------end--------------->8---

to slap the missing root element around the real contents.

HTH,
Tassilo

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

Reply via email to