Clojure dosyasını okumak, ilk satırı bir değişkene koymak ve diğer değişkene geri dönmek için çalışıyorum. Ben, bunu yapmak için ve herkes bana haber ver eğer isterdim öğrenmek için görünmüyor olabilirClojure, bir dosyadaki satırı tanıyın ve yalıtın
5
A
cevap
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...
...))
Güncelleme: Ah, demek sorudan "dinlenme" aldığını fark etti "dosyadaki satırların geri kalanı", dolayısıyla yukarıdaki other-lines
'da, dosyadaki ilk satır dışındaki tüm satırların bir sırasıdır. other-lines
yeniden katılma (str/join "\n" other-lines)
Eğer gerekiyorsa
"dosyanın içeriğinin geri kalanını içeren bir dize" yerine, yukarıdaki kodu kullanabilirsiniz, ama sonra/(require '[clojure.string :as str])
(require '[clojure.contrib.str-utils2 :as str])
(kullandığınız Clojure sürümüne bağlı olarak) ve de ki tek bir dizgeye;
(let [contents (slurp "/path/to/the/file")
[first-line rest-of-file] (.split #"\n" contents 2)]
...)
2
Clojure kafa:
(require '[clojure.string :as str])
(let [[f & r] (str/split (slurp "foo.txt") #"\n")]
... do something with f and r ...)
ED: ya alternatif olarak böyle bir şey kullanmak nasılsa Michal cevabını tanımak için başarısız oldu ve onu silme hakkında düşündüm, ama biraz farklı ve beri Clojure gösterir .string.split, yapmayacağım.
Bunu bir dosyaya verdiğimde, dosyanın bir yerine [\ aldım. Neden biliyor musun? – bleakgadfly
Bu çözümde, slurp tarafından döndürülen dize satırlara bölünür. Bu, (str/split str # "\ n") satırların bir vektörünü döndüreceği anlamına gelir. Daha sonra, ilk satır f'ye ve vektörün geri kalanı r'ye bağlanır. Michał'in cevabının ikinci paragrafına da bakın. – danlei
Çözümü denedim ve yaptım (println (str f r)). İlk satır mükemmel ama geri kalanlar parantez (yazım hatası) ve tırnak işaretleri içinde. Bu gibi: Bu ilk satırdır. ("" "Ve bu" "diğer satırlar"). Parantez ve alıntılardan kurtulmanın herhangi bir yolu var mı? Michaels çözümünün bu problemi nasıl çözdüğünü görün. – bleakgadfly