0

シーケンスのシーケンスにデータの行があり、各シーケンスは異なりますが、次のような一般的なパターンに従います。

("44999" "186300" "194300" "0" "380600" "325" "57" "0")

を使用してシーケンスのシーケンスをファイルに書き出すとき

(defn write-csv-file
  "Writes a csv file using a key and an s-o-s"
  [out-sos out-file]

  (if (= dbg 1)
    (println (first out-sos), "\n", out-file))

  (spit out-file "" :append false)
  (with-open [out-data (io/writer out-file)]
      (csv/write-csv out-data out-sos)))
.
.
.
(write-csv-file out-re "re_values.csv")

データはこのように出てきます

44999,186300,194300,0,380600,325,57,0

各シーケンスの最後に引用符で囲まれていない「、」が必要な場合を除いて、これはまさに私が望む方法(引用符で囲まれていない)です。

(concat one-row (list \,))関数の各シーケンスの最後に「、」を追加しようとしましたが、各シーケンスの最後(listに引用符で囲まれていない「、」を取得できません。これどうやってするの?

回避策として、sedを介してこのようなファイルを実行し、末尾のコンマを追加できますが、すべてClojureで実行したいと思います。

4

3 に答える 3

2

「カンマを追加」するのではなく、空のフィールドを追加したいと思います(その後、カンマで区切られます)。したがって、空の文字列を行シーケンスに追加するだけです。

于 2012-11-06T19:40:04.043 に答える
1

おそらく、out-sos 内の各シーケンスに空の文字列を連結します。Concat は怠惰なので、高価であってはなりません。

(with-open [out-data (io/writer out-file)]
  (csv/write-csv out-data (map #(concat % [""]) out-sos))))

ただし、最後に空の csv ライブラリが何をするかはわかりません。うまくいけば、空の要素を取得するだけです。

于 2012-11-06T19:41:07.627 に答える
0

:end-of-line 設定を ",\n" にしようとしましたか?

ドキュメントには次のように書かれています。

:行末

CSV ファイルを書き込むための行末文字を含む文字列。

デフォルト値: \n

これは私が試したことです:

(csv/write-csv data :end-of-line ",\n")
于 2012-11-06T19:07:44.347 に答える