Clojureは、CSVまたはclojure.data.csv。私は主に.csvファイルを読み込むためにclojure-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 "レポート"を取り込み、課金のような別の金融システムのデータベースにアップロードするデータをフォーマットしています。
私は多くの場合、それぞれの.csv行のいずれかになりますので、列名でデータを抽出したり、zipmap
「ped .csv rows」のシーケンスを作成することもできます。
ニース。今はすべてが 'put-csv'に残されていますが、助けてくれますか? –
これを追加しました。 – mobyte
doallに注意してください: を使用して強制的にエフェクトを適用できますか? のseqを連続して歩き、頭を保持してそれを返します。したがって、 seq全体が一度にメモリに常駐します。 – micrub