1

ファイル全体を評価しても問題はないようです。

(ns ShipDataRecord
  (:import [java.util.Date]
   [org.joda.time.DateTime]
   [org.joda.time.Seconds]
   [org.joda.time.format.*]
   [semsav.RecordSplitter]))
(require '[clojure.data.csv :as csv]
         '[clojure.java.io :as io])

(defrecord Record [W1 W2 W3])

(defn read-csv [fname count]
  (with-open [file (reader fname)]
    (doall (take count (map (comp first csv/read-csv)
                            (line-seq file))))))

(map #(apply ->Record %) (read-csv "test.csv" 1))

しかし、私が行ごとに評価するとき、それは私に問題を与えるようです。

したがって、ファイルを評価した後、REPLでこの行を実行しました

(:W3 (first Record))

しかし、それは私にIllegalArgumentExceptionのコンパイラ例外を与えます:java.lang.Class clojure.lang.RT.seqFrom(RT.java:494)からISeqを作成する方法がわかりません。

グーグルで検索しましたが、問題が見つからないようです。別の質問で質問しましたが、言葉が長すぎるため、新しい質問を作成する必要があります

4

1 に答える 1

1

(:W3 (first Record))記号はRecordクラスを表しRecordます。:W3以前の投稿から、によって生成されたレコードのコレクションの最初のレコードからフィールドを取得したいだけだと思います(map #...)。したがって、必要なのは、map式から、または式の結果を格納できる変数から、この値を取得することだけです。

(:W3 (first (map #(apply ->Record %) (read-csv "1.csv" 1))))

また

(def records (map #(apply ->Record %) (read-csv "1.csv" 1)))

(:W3 (first records))
于 2013-01-01T11:26:32.700 に答える