Make Clojure recognize and isolate the line in a file
I am trying to get Clojure to read a file, put the first line in a variable, and the rest in another variable. I cannot seem to find out how to do this and would love if anyone could give me a heads up,
;; for Clojure 1.1 (require '[clojure.contrib.duck-streams :as io]) ;; for bleeding edge (require '[clojure.java.io :as io]) (with-open [fr (io/reader "/path/to/the/file")] (let [[first-line & other-lines] (doall (line-seq fr))] ;; do stuff with the lines below... ...))
Update: Ah, just realised that I took "the rest" from the question to mean "the rest of the lines in the file", thus in the above other-lines is a seq of all the lines in the file except the first one.
If you need "a string containing the rest of the file's contents" instead, you could use the above code, but then (require '[clojure.contrib.str-utils2 :as str]) / (require '[clojure.string :as str]) (depending on the version of Clojure you're using) and say (str/join "\n" other-lines) to rejoin other-lines into one string; or, alternatively, use something like this:
(let [contents (slurp "/path/to/the/file") [first-line rest-of-file] (.split #"\n" contents 2)] ...)
(require '[clojure.string :as str]) (let [[f & r] (str/split (slurp "foo.txt") #"\n")] ... do something with f and r ...)
ED: Somehow I failed to recognize Michał's answer and thought about deleting it, but since it's a little different and shows clojure.string.split, I won't.