如何从序列中删除双引号(“)字符

时间:2012-11-13 21:01:22

标签: clojure

我有一系列序列,每个序列类似于以下内容:

(“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是上面的序列。

除了答案之外,我对指向文档的指针更感兴趣。我一直在玩这个,但无济于事。

1 个答案:

答案 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))

如果您printspit将其放入文件中,您不会注意整个结果的双引号,这是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