用逗号替换字符串中的空格

时间:2011-10-07 08:28:03

标签: clojure

我需要从下面找到所有唯一值并将它们传递给sql查询。下面是我想要做的一个例子,我实际上从两个文件中获取数据并将它们组合在一起并获得唯一值。

我的问题是我想将值放在sql IN()子句中但是我在分隔值时遇到麻烦

我尝试过使用替换,但这对我来说似乎不起作用

(def snapshot 
                #{{:id "1234" :mtm "101" :pv"200"}
                {:id"1235" :mtm "101" :pv"200"}
                {:id"10234" :mtm "101" :pv"200"}
                {:id"12034" :mtm "101" :pv"200"}
                {:id"127" :mtm "101" :pv"200"}}
)
 (def snapshot1 
                #{{:id"1238" :mtm "104" :pv"200"}
                {:id"234" :mtm "101" :pv"200"}
                {:id"124" :mtm "101" :pv"200"}
                {:id"123" :mtm "101" :pv"200"}
                {:id"134" :mtm "101" :pv"200"}}
)
(def SNAPSHOT-IDsT (set (map :id snapshot)))

(def SNAPSHOT-IDsT1 (set (map :id snapshot1)))

(def id-in-one-file-only (difference SNAPSHOT-IDsT1 SNAPSHOT-IDsT))

(println id-in-one-file-only)

这给了我{1238 123 134 234 124}

如何编辑这些结果以向我{1238, 123, 134, 234, 124}

然后我可以将它传递给字符串

(str "Select * from table where id in ("id-in-one-file-only")")

非常感谢任何帮助或提示

2 个答案:

答案 0 :(得分:1)

difference会返回一个集合,因此我假设您有#{1238 123 134 234 124}个结果。如何格式fn:

user=> (defn format-ids [s]
         (str "{"
              (reduce #(str %1 ", " %2) s)
              "}"))

user=> (format-ids #{1238 123 134 234 124})
"{134, 234, 1238, 123, 124}"

答案 1 :(得分:0)

interpose很适合这类事情:

user=> (apply str (interpose \, #{1238 123 134 234 124}))
"134,234,1238,123,124"

编辑:amalloy非常正确,clojure.string/join效率更高implementation

我上面做的是clojure.contrib v1.0 str-join中的内容(我怀疑我的记忆在我身上耍花招,这是我在第一时间看到插入的地方)。