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

oct*_*bus 1 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是上面的序列.

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

Iva*_*lik 5

据我所知,你有一系列的字符串.Clojure为序列提供了一个非常具体的toString实现,你可以在这里看到它.

如果您这样做(str d1)或只是输入d1repl并按Enter键,您将看到更多或更少的键入内容:字符串序列(字符串打印为双引号中的字符序列).

现在,如果要连接所有字符串,可以执行以下操作:

(apply str d1)
Run Code Online (Sandbox Code Playgroud)

如果你想用逗号分隔打印,你可以这样做:

(apply str (interpose "," d1))
Run Code Online (Sandbox Code Playgroud)

要输出为CSV格式,我建议使用clojure-csv.

最后,如果您只想打印列表但没有字符串的双引号,您可以这样做:

(print d1)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


EDIT1(由于问题的变化而更新):

这可以通过以下方式轻松实现:

(apply str (interpose "|" d1))
Run Code Online (Sandbox Code Playgroud)

请不要注意整个结果周围的双引号,如果print它或spit它在一个文件中你将看不到它们,这就是Clojure如何可读地打印字符串.

或者,如果你想要一次输出多个序列,你仍然可以使用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
Run Code Online (Sandbox Code Playgroud)

  • 我可以补充一点,[`pr`](http://clojuredocs.org/clojure_core/clojure.core/pr)是将数据打印到REPL的方法,它产生[`read`](http:// clojuredocs. org/clojure_core/clojure.core/read)-able输出,而使用[`print`](http://clojuredocs.org/clojure_core/clojure.core/print)就像你建议的那样,应该提供更多人类可读的输出这就是为什么它不包括引号. (3认同)