我正在寫一段代碼,需要讀取含有數據的文本文件。該文本文件的格式爲:如何使用Clojure讀取含有測試數據的文件?
name 1 4
name 2 4 5
name 3 1 9
我想在形式[:name Sarah :weight 1 cost :4]
創建地圖的載體。
當我嘗試使用line-seq閱讀器讀取文件時,它將每行讀取爲一個項目,因此分區不正確。請參閱下面的代碼:
(let [file-text (line-seq (reader "C://Drugs/myproject/src/myproject/data.txt"))
new-test-items (vec (map #(apply struct item %) (partition 3 file-text)))]
(println file-text)
(println new-test-items))
(sarah 1 1 jason 4 5 nila 3 2 jonas 5 6 judy 8 15 denny 9 14 lis 2 2 )
[{:name sarah 1 1, :weight jason 4 5, :value nila 3 2 } {:name jonas 5 6, :weight judy 8 15, :value denny 9 14}]
然後我試圖拿1分區,但仍然是結構不正確。
=> (let [file-text (line-seq (reader "C://Drugs/myproject/src/myproject/data.txt"))
new-test-items (vec (map #(apply struct item %) (partition 1 file-text)))]
(println file-text)
(println new-test-items))
(sarah 1 1 jason 4 5 nila 3 2 jonas 5 6 judy 8 15 denny 9 14 lis 2 2 )
[{:name sarah 1 1, :weight nil, :value nil} {:name jason 4 5, :weight nil, :value nil} {:name nila 3 2 , :weight nil, :value nil} {:name jonas 5 6, :weight nil, :value nil} {:name judy 8 15, :weight nil, :value nil} {:name denny 9 14, :weight nil, :value nil} {:name lis 2 2, :weight nil, :value nil} {:name , :weight nil, :value nil}]
nil
下一個我試圖發出聲音文件,但更糟糕的是:
=> (let [slurp-input (slurp "C://Drugs/myproject/src/myproject/data.txt")
part-items (partition 3 slurp-input)
mapping (vec (map #(apply struct item %) part-items))]
(println slurp-input)
(println part-items)
(println mapping))
sarah 1 1
jason 4 5
nila 3 2
jonas 5 6
judy 8 15
denny 9 14
lis 2 2
((s a r) (a h ) (1 1) (
請幫幫忙!這在Java中看起來像是一件容易的事情,但卻讓我在Clojure中遇難。
,因爲這是懶惰的,就看你要記住關閉時,你不會從中讀取任何數據文件。 (我經常發現我的自我包裝序列在一個空的close-when-empty懶讀者中。 – 2012-07-15 19:24:28
split來自clojure.string,讀者來自clojure.java.io – 2012-07-15 19:25:19
Arthur非常感謝你! (散列映射:名稱名稱 :權重(Integer/parseInt權重) :成本(整數/ parseInt成本))),則會出現以下錯誤:=>(map(fn [[name weight cost]] (map#(split%#「」)(line-seq(reader「C://Drugs/myproject/src/myproject/data.txt」)))) CompilerException java.lang.RuntimeException:無法解析符號:在這種情況下拆分,編譯:(NO_SOURCE_PATH:5) – user1525748 2012-07-15 19:25:39