Я пытаюсь заставить Clojure читать файл, помещать первую строку в переменную и остальных в другой переменной. Я, может казаться, не узнаю, как сделать это и любил бы, если кто-либо мог бы дать мне головы,
;; 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...
...))
Обновление: А, только что понял, что я принял "the rest" из вопроса за "остальные строки в файле", таким образом, в приведенном выше other-lines
- это seq всех строк в файле, кроме первой.
Если вам нужна "строка, содержащая остальное содержимое файла", вы можете использовать приведенный выше код, но тогда (require '[clojure.contrib.str-utils2 :as str])
/ (require '[clojure. string :as str])
(в зависимости от версии Clojure, которую вы используете) и скажите (str/join "\n" other-lines)
для объединения other-lines
в одну строку; или, как вариант, используйте что-то вроде этого:
(let [contents (slurp "/path/to/the/file")
[first-line rest-of-file] (.split #"\n" contents 2)]
...)
Clojure head :
(require '[clojure.string :as str])
(let [[f & r] (str/split (slurp "foo.txt") #"\n")]
... do something with f and r ...)
ED: Как-то я не смог распознать ответ Михала и подумал об его удалении, но поскольку он немного отличается и показывает clojure.string.split, я не буду.