【问题标题】:How to strip double quote (") characters from sequence如何从序列中去除双引号(“)字符
【发布时间】:2012-11-13 21:01:21
【问题描述】:

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

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

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

【问题讨论】:

  • 双引号是实际数据的一部分还是只是代表字符串的分隔符?
  • 为了回答您的评论,我编辑了 OP。
  • 只是想让你知道我已经更新了我的答案。

标签: clojure


【解决方案1】:

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

如果您输入(str d1) 或直接在repl 中输入d1 并按回车,您将或多或少看到您输入的内容:字符串序列(字符串打印为双引号中的字符序列)。

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

(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

【讨论】:

  • 我可能会补充一点,pr 是将数据打印到 REPL 的方法,它会产生 read-able 输出,而像您建议的那样使用 print 应该提供更多的人类可读性输出,这就是它不包含引号的原因。
  • @DaoWen 感谢pr 函数名我记不住了。
  • 感谢您更新您的答案。在某些时候,我记得在 REPL 中显示字符串的一部分与写出的内容,但是当我看到输出 .csv 字段周围的引号时,我记得对于我的任何可以包含逗号的数据,比如联名或地址,我不得不换档并手写出一个 Informix 默认管道分隔文件。
猜你喜欢
  • 2010-11-13
  • 2023-04-04
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
相关资源
最近更新 更多