Sto cercando di ottenere Clojure per leggere un file, mettere la prima riga in una variabile e il resto in un'altra variabile. io non riesco a trovare il modo di fare questo e mi piacerebbe se qualcuno mi potrebbe dare un testa a testa,Make Clojure riconosce e isola la linea in un file
risposta
;; 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)]
...)
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ò.
quando esco in un file ottengo un sacco di [\ all'interno del file. Sai perché? – bleakgadfly
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
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