2010-07-03 11 views

risposta

4
;; 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... 
    ...)) 

Aggiornamento: Ah, appena capito che ho preso "il resto" dalla questione per indicare "il resto delle righe nel file", quindi nel precedente other-lines è un seq di tutte le righe nel file tranne il primo.

Se avete bisogno di "una stringa contenente il resto del contenuto del file", invece, è possibile utilizzare il codice di cui sopra, ma poi (require '[clojure.contrib.str-utils2 :as str])/(require '[clojure.string :as str]) (a seconda della versione di Clojure si sta utilizzando) e dire (str/join "\n" other-lines) di ricongiungersi other-lines in una stringa; o, in alternativa, usare qualcosa di simile a questo:

(let [contents (slurp "/path/to/the/file") 
     [first-line rest-of-file] (.split #"\n" contents 2)] 
    ...) 
2

Clojure testa:

(require '[clojure.string :as str]) 
(let [[f & r] (str/split (slurp "foo.txt") #"\n")] 
    ... do something with f and r ...) 

ED: In qualche modo sono riuscito a riconoscere la risposta di Michał e pensavo a eliminarlo, ma dal momento che è un po 'diverso e mostra clojure .string.split, non lo farò.

+0

quando esco in un file ottengo un sacco di [\ all'interno del file. Sai perché? – bleakgadfly

+0

In questa soluzione, la stringa restituita da slurp è divisa in righe. Ciò significa che (str/split str # "\ n") restituirà un vettore di linee. Quindi, la prima riga è associata a f e il resto del vettore a r. Vedi anche il secondo paragrafo della risposta di Michał. – danlei

+0

ho provato la soluzione e ho fatto un (println (str f r)). La prima riga è perfetta ma il resto è in parantheses (errore di battitura) e virgolette. così: Questa è la prima linea. ("" "E questo è" "altre linee"). Un modo per sbarazzarsi delle parate e delle virgolette? Non vedo come la soluzione di Michaels risolva questo problema. – bleakgadfly