【发布时间】:2019-01-22 13:37:12
【问题描述】:
我是clojure的新手。我正在尝试编写一个程序,该程序在读取数据后从文件(逗号分隔文件)中读取数据我试图在分隔符“,”时分割每一行,但我面临以下错误:
CompilerException java.lang.NullPointerException, 编译:(com\clojure\apps\StudentRanks.clj:26:5)
这是我的代码:
(ns com.clojure.apps.StudentRanks)
(require '[clojure.string :as str])
(defn student []
(def dataset (atom []))
(def myList (atom ()))
(def studObj (atom ()))
(with-open [rdr (clojure.java.io/reader "e:\\example.txt")]
(swap! dataset into (reduce conj [] (line-seq rdr)))
)
(println @dataset)
(def studentCount (count @dataset))
(def ind (atom 0))
(loop [n studentCount]
(when (>= n 0)
(swap! myList conj (get @dataset n))
(println (get @dataset n))
(recur (dec n))))
(println myList)
(def scount (count @dataset))
(loop [m scount]
(when (>= m 0)
(def data(get @dataset m))
(println (str/split data #","))
(recur (dec m))))
)
(student)
提前致谢。
【问题讨论】:
-
不要在函数中使用
def,使用let。 -
我的建议是放慢一点。作为 clojure 的新手,您可能想要考虑原子,交换!甚至循环为更高级的主题。您不需要任何这些东西来从文件中读取行并拆分它们。事实上,即使在相当复杂的程序中,你也很少需要它们 :-)
-
我的要求是逐行读取文件内容并将每一行推入一个列表。例如:我的文件内容是“1,bharath,85,86,89,85”,要求是:[(1 bharath 85 86 89 85)]。
标签: clojure