2012-11-13 68 views
1

字符我有序列的序列,並且每個序列是類似於以下:如何剝去雙引號(「)從序列

(」 9990999" ,‘43’,‘巷道’‘MORRISON,VAN X DMD’ 「43 ROADWAY」「SOMETHINGTON」「XA」「00000」「501」「18050」「2500」「1180」「14370」「0」)

clojure-csv在這裏不會幫助我,因爲它應該 - 引用帶有嵌入逗號的字段,我想要在每個字段周圍沒有引號的管道分隔的輸出,其中一些包含嵌入逗號。跟隨ing,但報價保持不變。

(filter (fn [x] (not (= (str (first (str x))) (str (first (str \")))))) d1)

其中d1是上面的序列。

除了答案,我更感興趣的是一個指向文檔的指針。我一直在玩這個,但無濟於事。

+0

是實際數據的雙引號部分或者他們只是代表一個字符串的分隔符? – bostonou

+0

要回答你的評論,我編輯了OP。 – octopusgrabbus

+0

只是想讓你知道我已經更新了我的答案。 –

回答

5

據我所知,你有一串字符串。 Clojure爲序列提供了一個非常具體的toString實現,你可以看到它here

如果你做(str d1)或者只需在repl中輸入d1並按回車鍵,你會看到或多或少你輸入的內容:字符串序列(字符串被打印爲雙引號中的字符序列)。

現在,如果你想連接你可以做到這一點的字符串:

(apply str d1) 

如果你想打印用逗號分開,你可以這樣做:

(apply str (interpose "," d1)) 

要輸出爲CSV格式我建議使用clojure-csv

最後,如果你只是想打印的清單,但沒有字串,雙引號,你可以這樣做:

(print d1) 

希望這有助於。


EDIT1(更新由於問題的變化):

(apply str (interpose "|" d1)) 

請不要關注圍繞整個雙引號:

這可以很容易地實現結果如果你print it或spit它變成一個文件你不會看到它們,這就是Clojure如何打印字符串readably

另外,如果您有想一次輸出,你仍然可以使用Clojure的-CSV但不同的分隔多個序列那樣:

(ns csv-test.core 
    (:require [clojure-csv.core :as csv])) 

(def d1 (list "9990999" "43" "ROADWAY" "MORRISON, VAN X DMD" "43 ROADWAY" "SOMETHINGTON" "XA" "00000" "501" "18050" "2500" "1180" "14370" "0")) 
(print (csv/write-csv [d1] :delimiter "|")) 
;;prints: 
;;9990999|43|ROADWAY|MORRISON, VAN X DMD|43 ROADWAY|SOMETHINGTON|XA|00000|501|18050|2500|1180|14370|0 
+3

我可能會補充說,['pr'](http://clojuredocs.org/clojure_core/clojure.core/pr)是將數據打印到REPL的方法,它生成['read'](http:// clojuredocs .org/clojure_core/clojure.core/read)輸出,而使用['print'](http://clojuredocs.org/clojure_core/clojure.core/print)就像你所建議的那樣,應該讓更多的人可讀輸出,這就是爲什麼它不包括引號。 – DaoWen

+0

@DaoWen感謝'PR'我記不清函數的名字了。 –

+1

感謝您更新您的答案。在某些時候,我記得在字符串的REPL部分中的顯示與寫出的內容有關,但是當我看到輸出.csv字段周圍的引號時,我記得對於可以包含逗號的任何數據,例如聯合名稱或地址,我不得不切換檔案並手寫出一個Informix缺省的管道分隔文件。 – octopusgrabbus