Skip to content

Instantly share code, notes, and snippets.

@cgrand
Created March 1, 2013 15:46
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cgrand/5065503 to your computer and use it in GitHub Desktop.
Save cgrand/5065503 to your computer and use it in GitHub Desktop.
=> (defn line-seq [^java.io.BufferedReader rdr sep]
(let [sep (str sep)
buf (char-array 1024)
sb (StringBuilder.)]
((fn f [m]
(lazy-seq
(let [n (.read rdr buf 0 1024)]
(if (neg? n)
(when (pos? (.length sb))
(list (str sb)))
(let [_ (.append sb buf 0 n)
n (.indexOf sb sep m)
s (.substring sb 0 n)
_ (.delete sb 0 (+ n (count sep)))]
(cons s (f (.length sb)))
))))) 0)))
WARNING: line-seq already refers to: #'clojure.core/line-seq in namespace: simple-webapp.core, being replaced by: #'simple-webapp.core/line-seq
#'simple-webapp.core/line-seq
=> (line-seq (java.io.StringReader. "Hello my dera friend") " ")
ClassCastException java.io.StringReader cannot be cast to java.io.BufferedReader simple-webapp.core/line-seq/f--5955/fn--5956 (NO_SOURCE_FILE:7)
=> (line-seq (java.io.BufferedReader. (java.io.StringReader. "Hello my dera friend")) " ")
("Hello" "my dera friend")
=> (defn line-seq [^java.io.BufferedReader rdr sep]
(let [sep (str sep)
buf (char-array 1024)
sb (StringBuilder.)]
((fn f [m]
(lazy-seq
(if (< m (.length sb))
(let [n (.indexOf sb sep m)]
(if (neg? n)
(f (.length sb))
(let [s (.substring sb 0 n)]
(.delete sb 0 (+ n (count sep)))
(cons s (f 0)))))
(let [n (.read rdr buf 0 1024)]
(if (neg? n)
(when (pos? (.length sb))
(list (str sb)))
(f (.length (.append sb buf 0 n)))))))) 0)))
#'simple-webapp.core/line-seq
=> (line-seq (java.io.BufferedReader. (java.io.StringReader. "Hello my dera friend")) " ")
("Hello my dera friend")
=> (defn line-seq [^java.io.BufferedReader rdr sep]
(let [sep (str sep)
buf (char-array 1024)
sb (StringBuilder.)]
((fn f [m]
(lazy-seq
(if (< m (.length sb))
(let [n (.indexOf sb sep m)]
(if (neg? n)
(f (.length sb))
(let [s (.substring sb 0 n)]
(.delete sb 0 (+ n (count sep)))
(cons s (f 0)))))
(let [n (.read rdr buf 0 1024)]
(if (neg? n)
(when (pos? (.length sb))
(list (str sb)))
(do
(.append sb buf 0 n)
(f m))))))) 0)))
#'simple-webapp.core/line-seq
=> (line-seq (java.io.BufferedReader. (java.io.StringReader. "Hello my dera friend")) " ")
("Hello" "my" "dera" "friend")
=> (line-seq (java.io.BufferedReader. (java.io.StringReader. "Hello my dear friend")) " ")
("Hello" "my" "dear" "friend")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment