将CSV值转换为Clojure列表

时间:2012-08-28 16:41:57

标签: clojure

将第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"]

3 个答案:

答案 0 :(得分:2)

假设您已经可以阅读csv文件......

您可以将read-stringinto

结合使用
user=> (def your_csv_column "[\"SNIA34\", \"M33KLC\", \"M34KLC\"]")
#'user/your_csv_column
user=> (into '() (read-string your_csv_column))
("M34KLC" "M33KLC" "SNIA34")

答案 1 :(得分:2)

您可以使用Clojure Csv来执行此操作。

答案 2 :(得分: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))

我发现非常有帮助的是避免使用来自SO和其他来源的非常有用的建议 - 并且鉴于我的大部分.csv数据都是来自数据库查询,我将每个zipmap列映射到每个.csv seqeuence(行),然后通过map键对该数据进行操作。它简化了我的工作。