.csvファイルでできることはすべて、clojure-csvまたはclojure.data.csvを使用することをお勧めします。私は主にclojure-csvを使用して.csvファイルを読み込みます。
これは、ほとんどのClojureプログラムで使用しているユーティリティライブラリのコードスニペットです。
from util.core
(ns util.core
^{:author "Charles M. Norton",
:doc "util is a Clojure utilities directory"}
(:require [clojure.string :as cstr])
(:import java.util.Date)
(:import java.io.File)
(:use clojure-csv.core))
(defn open-file
"Attempts to open a file and complains if the file is not present."
[file-name]
(let [file-data (try
(slurp file-name)
(catch Exception e (println (.getMessage e))))]
file-data))
(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))]
(if-not (empty? csv-data)
(pop csv-data)
nil)))
(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))
.csvファイルを読み込んだら、その内容をどのように処理するかは別の問題です。通常、私は資産査定などの1つの金融システムから.csv「レポート」を取得し、請求などの別の金融システムのデータベースにアップロードするデータをフォーマットしています。
多くの場合、zipmap
各.csv行を使用して、列名でデータを抽出できるようにするか(列名を読み込んで)、一連のzipmap
.csv行を作成します。