2013-04-20 3 views
5

私はREPLでテキスト解析を行っていますが、bibtexエントリやEBNF表記など、文字列にデータをたくさん入れたい場合があります。通常、文字列には引用符が含まれている場合があります。非常に退屈で、手動でエスケープする必要がある間違いが多いです。Clojureで引用符をエスケープしなくても、テキストを扱う簡単な方法は?

Rubyの%Q|Iのような別の方法が"Quotation Marks"|またはheredocsなどを使用できますか?あるいは、これを可能にするためにマクロや読者の修正を書くことは可能でしょうか?

+0

これは私も思っていたものです。あなたがデータのためにそれを回避する一つの方法は、 'slurp'を使ってファイルから読み込むことです。 – DaoWen

+0

ランタイムコードまたはエディタでダンプしていますか?後で、この質問を参照してください:http://stackoverflow.com/questions/11043318/does-clojure-have-raw-string – noahlz

+0

どのエディタを使用していますか?私の通常のアプローチは、私のためにエスケープを追加するスマートな貼り付け機能を持つエディタを使用することです。 – Korny

答えて

0

より堅牢なクォート構文についてはsome discussionがありましたが、これをサポートするための変更は差し迫っていないようです。

あなたが言及しているREPLのやりとりを具体的に処理するためには、これは便利です。

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

、REPLで(read-lines)を実行しているコンテンツを貼り付け、その後の行を追加して、それを使用してください:彼らはすべてのサポートread-lineひどくうまくはありません - それはおそらく、そこにすべてのREPLのために動作しませんそれ自体で.

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

方法について、単にあなたがあなたのテキストをダンプ先の一時ファイルを使用して、slupを使用して、そこからそれを読みますか?あなたがそれを呼び出すたびに、自動的にすべてがエスケープされます。

(slurp "tempfile.txt") 

または

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

または

(defn rd [] (def data (slurp "tempfile.txt"))) 
関連する問題