Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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,

like image 755
bleakgadfly Avatar asked Jul 03 '10 20:07

bleakgadfly


1 Answers

;; 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)]
  ...)
like image 104
Michał Marczyk Avatar answered Sep 27 '22 16:09

Michał Marczyk