1

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

(“9990999”“43”“ROADWAY”“MORISON,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 是上面的序列。

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

4

1 回答 1

5

据我了解,您有一系列字符串。Clojure 为序列提供了一个非常具体的 toString 实现,您可以在此处查看

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

现在,如果您想连接所有字符串,您可以这样做:

(apply str d1)

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

(apply str (interpose "," d1))

输出是 CSV 格式,我建议使用clojure-csv

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

(print d1)

希望这可以帮助。


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

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

(apply str (interpose "|" d1))

请不要注意整个结果周围的双引号,如果您print将它或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
于 2012-11-13T21:25:18.390 回答