2012-08-28 4 views
1

3 열의 CSV 행을 Clojure 목록으로 변환하는 가장 좋은 방법은 무엇입니까?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"] 
+0

벡터 앞에있는 데이터는 무엇입니까? 해당 데이터가 .csv 파일의 일부입니까? – octopusgrabbus

+0

예, CSV 파일의 한 줄입니다 –

답변

2

당신은 당신이 그렇게 Clojure Csv을 사용할 수 있습니다 into

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

와 함께 read-string을 사용할 수 있습니다 ... 당신은 이미 CSV 파일을 읽을 수 있습니다 가정.

+0

예가 있습니까? – octopusgrabbus

+0

github 페이지 (링크)의 추가 정보에는 csv를 꺼내는 예제가 있습니다. 가장 간단한 방법은 줄을 문자열로 읽고 왼쪽 및 오른쪽 대괄호를 빈 문자열로 바꾸고 csv API를 사용하여 전체를 가져 오는 것입니다. – Bill

1

데이터가 흥미 롭습니다. 기존의 쉼표로 구분 된 행과 괄호 안에있는 데이터가 포함되어있는 것처럼 보입니다. 괄호로 묶은 데이터가 .csv 파일에서 읽었던 표현 이었는지 여부는 알 수 없었습니다. 그러나 어느 방식 으로든 .csv 파일을 읽는 방법입니다.

clojure를 사용하는 내 라이브러리의 project.clj -csv :

(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 헤더 : 벡터의 벡터로 해석 .csv 파일을 반환

(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)) 

내 도서관의 기능. SO 및 다른 소스에서 매우 유용한 조언 - - 데이터베이스 쿼리에서 내 .CSV 데이터의 대부분을 주어, 나는 각 열을 zipmap 나는 매우 도움이 될 것으로 무엇을

(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)) 

은 n 번째를 사용하지 않는 것입니다. csv seqeuence (행)을 선택하고지도 키로 해당 데이터를 조작합니다. 그것은 나를 위해 일을 단순화합니다.