Vector 范围外的Clojure映射
我试图将数据保存到某种类型的集合中,但我的程序正在将所有内容保存到单独的映射中。我想把它做成一张地图Vector 范围外的Clojure映射,vector,file-io,clojure,hashmap,Vector,File Io,Clojure,Hashmap,我试图将数据保存到某种类型的集合中,但我的程序正在将所有内容保存到单独的映射中。我想把它做成一张地图 (defn readFile [] (map (fn [line] (clojure.string/split line #";")) (with-open [rdr (reader "C:/Users/Rohil/Desktop/textfile.txt")] (doseq [[idx line] (map-indexed vector(line-seq r
(defn readFile []
(map (fn [line] (clojure.string/split line #";"))
(with-open [rdr (reader "C:/Users/Rohil/Desktop/textfile.txt")]
(doseq [[idx line] (map-indexed vector(line-seq rdr))]
(if(.contains line "201609")
(if(not(.contains line "TBA"))
(println(assoc table :code(nth(clojure.string/split line #";")3) :instructor(nth(clojure.string/split line #";")19)))
)
)
)
)
)
)
)
任何帮助都将不胜感激 看起来你正在适应clojure:-)我也经历了同样的过程。坚持住,这是值得的 第一:重要的是要认识到map将把函数的结果保存到一个新集合中。正如cfrick提到的,
println
返回nil
,并且assoc不会更改映射
我猜你想做的是:你想要一个dict集合,每个dict都有两个键,就像这样:
[
{ :code 1 :instructor "blah"}
{ :code 2 :instructor "boo" }
]
您需要这些值来自文件,但您只希望保存行中包含“201609”但不包含“TBA”的行
首先是一些一般性意见:
- 您可能希望将此函数拆分为更小的部分。一个可以是检查行(
),另一个可以读取文件包含201609但不包含tba
- 我知道这是你问题的标题,但很可能有一种比更改全局变量更好的方法。也许您可以让函数
返回表readFile
- 如果可以将参数传递给函数,请尝试李>
- 我不确定你想用这行代码做什么(doseq[…请给我们更多的上下文。我将忽略它
(ns test
(:require [clojure.string :as s]
[clojure.java.io :as io]))
(defn line-filter [include exclude line]
(and (not (s/includes? line exclude))
(s/includes? line include)))
(defn process-line [line]
(let [line-parts (s/split line #";")
code (nth line-parts 3)
instructor (nth line-parts 19)]
{:code code :instructor instructor}))
(defn read-file [file-name]
(s/split (slurp (io/resource file-name)) #"\n"))
(defn parse-lines [lines]
(map process-line lines))
(defn read-file-and-parse
"This function will read a file, process the lines, and output a collection of maps"
[filename search-for exclude]
(parse-lines
(filter #(line-filter search-for exclude %)
(read-file filename))))
您现在可以这样调用此函数:(读取文件并解析“test.txt”201609“TBA”)
如果要将此函数的结果添加到表中
,可以使用concat
。但是,这将返回列表的新版本(添加了新条目),而不会更改先前定义的列表
欢迎使用函数式编程:-)什么是
表
?另外println
将返回nil
,并且assoc
不会修改您以前可能放在某处的任何(def table{})
。