1

シーケンスのシーケンスがあり、各シーケンスは次のようになります。

("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は上記のシーケンスです。

答えに加えて、私はドキュメントへのポインタにもっと興味があります。私はこれで遊んでいますが、役に立ちません。

4

1 に答える 1

5

私が理解している限り、あなたは一連の文字列を持っています。Clojureは、シーケンスに対して非常に特殊なtoString実装を提供します。これは、ここで確認できます。

replを入力する(str d1)か、単に入力d1してEnterキーを押すと、入力した内容が多かれ少なかれ表示されます。文字列のシーケンス(文字列は二重引用符で囲まれた文字のシーケンスとして出力されます)。

ここで、すべての文字列を連結する場合は、次のように実行できます。

(apply str d1)

カンマで区切って印刷したい場合は、次のようにすることができます。

(apply str (interpose "," d1))

CSV形式で出力するには、clojure-csvを使用することをお勧めします。

最後に、単にリストを印刷したいが、文字列を二重引用符で囲まない場合は、次のようにすることができます。

(print d1)

お役に立てれば。


EDIT1(質問の変更による更新):

これは、次の方法で簡単に実現できます。

(apply str (interpose "|" d1))

結果全体の二重引用符に注意しないでください。結果が表示されない場合は、結果全体を二重引用符で囲んで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
于 2012-11-13T21:25:18.390 に答える