1

列 3 の CSV のこの行を Clojure リストに変換する最良の方法は何ですか?

357302041352401, 2012-08-27 19:59:32 -0700, 100, ["SNIA34", "M33KLC", "M34KLC", "W35REK", "SRBT", "MODE", "BFF21S", "CC12", "RCV56V", "NBA1", "RESP", "A0NTC", "PRNK", "WAYS", "HIRE", "BITE", "INGA1", "M32MOR", "TFT99W", "TBF5P", "NA3NR"]
4

3 に答える 3

2

Clojure Csvを使用してそれを行うことができます。

于 2012-08-28T20:10:08.360 に答える
2

すでにcsvファイルを読み取ることができると仮定します...

intoと組み合わせてread-stringを使用できます

user=> (def your_csv_column "[\"SNIA34\", \"M33KLC\", \"M34KLC\"]")
#'user/your_csv_column
user=> (into '() (read-string your_csv_column))
("M34KLC" "M33KLC" "SNIA34")
于 2012-08-28T16:56:52.697 に答える
1

あなたのデータは興味深いものです。これには、従来のコンマ区切りの行が含まれているようで、その後に括弧内のデータが続きます。角かっこで囲まれたデータが .csv ファイルにあった表現なのか、それとも読んだ後に必要な表現なのかはわかりませんでしたが、いずれにしても、.csv ファイルを読む方法は次のとおりです。

clojure-csv を使用する私のライブラリの project.clj:

(defproject util "1.0.4-SNAPSHOT"
  :description "A general purposes Clojure library"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [clojure-csv/clojure-csv "1.3.2"]]
  :aot [util.core]
  :omit-source true)

私のライブラリの core.clj ヘッダー:

(ns util.core
  ^{:author "Charles M. Norton",
    :doc "util is a Clojure utilities directory containing things
          most Clojure programs need, like cli routines.
        Created on April 4, 2012"}

  (:require [clojure.string :as cstr])
  (:import java.util.Date)
  (:import java.io.File)
  (:use clojure-csv.core))

ベクトルのベクトルとして解析された .csv ファイルを返す私のライブラリの関数。

(defn ret-csv-data
"Returns a lazy sequence generated by parse-csv.
 Uses open-file which will return a nil, if
 there is an exception in opening fnam.

 parse-csv called on non-nil file, and that
 data is returned."

 [fnam]
 (let [  csv-file (open-file fnam)

   inter-csv-data (if-not (nil? csv-file)
                    (parse-csv csv-file)
                     nil)

  csv-data (vec (filter #(and pos? (count %) (not (nil? (rest %)))) 
            inter-csv-data))]

    ;removes blank sequence at EOF.                
    (pop csv-data)))

(defn fetch-csv-data
    "This function accepts a csv file name, and returns parsed csv data,
     or returns nil if file is not present."

    [csv-file]
        (let [csv-data (ret-csv-data csv-file)]
            csv-data))

私が非常に役立つとわかったのは、nth の使用を避けることです (SO や他の情報源からの非常に役立つアドバイス)。私の .csv データのほとんどがデータベース クエリからのものであることを考えると、列を各 .csv シーケンス (行) に zipmap し、次に、マップキーでそのデータを操作します。それは私にとって物事を単純化します。

于 2012-08-29T12:24:56.550 に答える