あなたのデータは興味深いものです。これには、従来のコンマ区切りの行が含まれているようで、その後に括弧内のデータが続きます。角かっこで囲まれたデータが .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 し、次に、マップキーでそのデータを操作します。それは私にとって物事を単純化します。