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

Clojure 如何从序列中删除双引号(";)字符,clojure,Clojure,我有一个序列,每个序列类似于以下内容: (“9990999”“43”“ROADWAY”“MORRISON,VAN X DMD”“43 ROADWAY”“SOMETHINGTON”“XA”“00000”“501”“18050”“2500”“1180”“14370”“0”) clojure csv在这里对我没有帮助,因为它——它应该——引用带有嵌入逗号的字段。我希望每个字段周围不带引号的以管道分隔的输出,其中一些字段包含嵌入的逗号 我已经研究了许多删除双引号字符的方法,包括以下内容,但引号保持不变

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

(“9990999”“43”“ROADWAY”“MORRISON,VAN X DMD”“43 ROADWAY”“SOMETHINGTON”“XA”“00000”“501”“18050”“2500”“1180”“14370”“0”)

clojure csv在这里对我没有帮助,因为它——它应该——引用带有嵌入逗号的字段。我希望每个字段周围不带引号的以管道分隔的输出,其中一些字段包含嵌入的逗号

我已经研究了许多删除双引号字符的方法,包括以下内容,但引号保持不变

(过滤器(fn[x](非(=(str(first(str x))))(str(first(str\”)))))))d1)

其中d1为上述顺序


除了答案,我更感兴趣的是指向文档的指针。我一直在玩这个,但没有用。

据我所知,您有一个字符串序列。Clojure为序列提供了非常具体的toString实现,您可以看到

如果您执行
(str d1)
或在repl中键入
d1
,然后按enter键,您将或多或少看到您键入的内容:字符串序列(字符串以双引号中的字符序列打印)

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

(apply str d1)
如果要用逗号分隔打印,可以执行以下操作:

(apply str (interpose "," d1))
(print d1)
输出是我建议使用的CSV格式

最后,如果您只想打印列表,但字符串周围没有双引号,则可以执行以下操作:

(apply str (interpose "," d1))
(print d1)
希望这有帮助


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

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

(apply str (interpose "|" d1))
如果您
打印
放入一个您看不到的文件中,请不要注意整个结果周围的双引号,这正是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

据我所知,您有一个字符串序列。Clojure为序列提供了非常特定的toString实现,您可以看到它

如果您执行
(str d1)
或在repl中键入
d1
,然后按enter键,您将或多或少看到您键入的内容:字符串序列(字符串以双引号中的字符序列打印)

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

(apply str d1)
如果要用逗号分隔打印,可以执行以下操作:

(apply str (interpose "," d1))
(print d1)
输出是我建议使用的CSV格式

最后,如果您只想打印列表,但字符串周围没有双引号,则可以执行以下操作:

(apply str (interpose "," d1))
(print d1)
希望这有帮助


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

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

(apply str (interpose "|" d1))
如果您
打印
放入一个您看不到的文件中,请不要注意整个结果周围的双引号,这正是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

双引号是实际数据的一部分,还是它们只是表示字符串的分隔符?为了回答您的评论,我编辑了OP。只是想让您知道我已经更新了我的答案。双引号是实际数据的一部分,还是它们只是表示字符串的分隔符?为了回答您的评论,我编辑了OP。只是想删除难道你不知道我已经更新了我的答案。我可能会补充说,这是一种将数据打印到REPL的方法,它可以产生可输出的数据,而按照你的建议使用应该可以提供更多可读的输出,这就是为什么它不包括引号的原因。@DaoWen感谢
pr
我记不起函数的名称。感谢upda在某个时刻,我记得在REPL部分显示字符串与写入内容的对比,但当我看到output.csv字段周围的引号时,我记得对于任何可能包含逗号的数据,如联合名称或地址,我必须切换档位并手动写出Informix默认管道分隔文件。我可能会dd这是一种将数据打印到REPL的方法,REPL可以生成可编辑的输出,而按您的建议使用应该可以提供更多可读的输出,这就是为什么它不包含引号的原因。@DaoWen感谢
pr
我记不起函数的名称。感谢您更新了答案。在某个时候,我记得了e显示在字符串的REPL部分,与写入的内容相对,但是当我看到output.csv字段周围有引号时,我记得对于我的任何可能包含逗号的数据,如接头名称或地址,我必须切换档位并手动写出一个Informix默认管道分隔文件。