2013-04-20 13 views
5

REPL dosyasında metin ayrıştırma ile oynuyorum ve bazen bibtex girişi veya bazı EBNF notasyonu gibi bir dizi veriyi bir dizeye dökmek istiyorum. Genellikle dizede tırnak işaretleri olabilir ve oClojure'da tırnak işaretleri kaçmak zorunda kalmadan metin ile çalışmak için kolay yolu?

bunu yapmanın alternatif yolu böyle Ruby'nin %Q|I"Quotation Marks"| veya heredocs vb gibi kullanabilirsiniz, var mı .. çok sıkıcı ve hata eğilimli manuel olarak kaçmak zorunda mı? Ya da bunu sağlamak için okuyucunun bir makrosu veya modifikasyonu yazılabilir mi?

+0

Bu ben de istediğim şeydir. Veri için etrafta çalışmanın bir yolu, onu bir dosyadan "slurp" ile okumaktır. – DaoWen

+0

Çalışma zamanı kodunuzda veya editörünüzde "damping" yapıyor musunuz? Daha sonra, şu soruya bakın: http://stackoverflow.com/questions/11043318/does-clojure-have-raw-string – noahlz

+0

Hangi düzenleyiciyi kullanıyorsunuz? Bu tür bir şey için her zamanki yaklaşımım, benim için kaçışları ekleyen akıllı bir yapıştırma işlevine sahip bir editör kullanmaktır. – Korny

cevap

0

Daha sağlam bir alıntılama sözdizimi hakkında some discussion oldu, ancak bunu destekleyecek hiçbir değişiklik yok gibi görünüyor.

Bu arada, bahsettiğiniz REPL etkileşimini özellikle ele almak için, bunu yararlı bulabilirsiniz.

 
(defn read-lines [] 
    (->> (repeatedly read-line) 
     (take-while #(not= % ".")) 
     (mapcat #(list % "\n")) 
     (apply str))) 

bir satır ekleyerek, sonra Repl de (read-lines) çalışan içeriğinizi yapıştırarak ve bunu kullanın: onlar korkunç de tüm desteğini read-line yok - muhtemelen orada her Repl için çalışmıyor Not tek başına bir .:

 
user=> (read-lines) 
    #_=> This "works" 
    #_=> sometimes... 
    #_=> . 
"This \"works\"\nsometimes...\n" 
user=> (print *1) 
This "works" 
sometimes... 
nil 
-1

nasıl basitçe metninizi dökümü ve sonra orada slup kullanarak okumak içine geçici-dosyasını kullanma hakkında? Bu şekilde, her aramada her şey otomatik olarak kaçar mı?

(slurp "tempfile.txt") 

veya

(def data (slurp "tempfile.txt")) 

veya

(defn rd [] (def data (slurp "tempfile.txt")))