我有一系列序列,每个序列类似于以下内容:
(“9990999”“43”“ROADWAY”“MORRISON,VAN X DMD”“43 ROADWAY”“SOMETHINGTON”“XA”“00000”“501”“18050”“2500”“1180”“14370”“0 “)
clojure-csv在这里不会帮助我,因为它 - 应该 - 用嵌入的逗号引用字段。我想在每个字段周围没有引号的管道分隔输出,其中一些包含嵌入的逗号。
我已经看了很多方法来删除双引号字符,包括以下内容,但引号保持不变。
(filter (fn [x] (not (= (str (first (str x))) (str (first (str \")))))) d1)
其中d1是上面的序列。
除了答案之外,我对指向文档的指针更感兴趣。我一直在玩这个,但无济于事。
答案 0 :(得分:5)
据我了解,你有一系列字符串。 Clojure为序列提供了一个非常具体的toString实现,你可以看到它here。
如果您执行(str d1)
或只是在repl中键入d1
并按Enter键,您将看到更多或更少的键入内容:字符串序列(字符串打印为双引号中的字符序列)
现在,如果你想连接所有的字符串,你可以这样做:
(apply str d1)
如果您想用逗号分隔打印,可以这样做:
(apply str (interpose "," d1))
要输出为CSV格式,我建议使用clojure-csv。
最后,如果你只想打印列表但没有字符串的双引号,你可以这样做:
(print d1)
希望这有帮助。
EDIT1 (由于问题的更改而更新):
这可以通过以下方式轻松实现:
(apply str (interpose "|" d1))
如果您print
或spit
将其放入文件中,您不会注意整个结果的双引号,这是Clojure打印字符串{{ 3}}
或者,如果您有多个类似您想要一次输出的序列,您仍然可以使用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