clojure读取文件->转换Map
来源:互联网 发布:alphago软件 编辑:程序博客网 时间:2024/04/29 13:28
一月份的那篇博客http://blog.csdn.net/lrq1988/article/details/18091901处理数据,其大概意思是读取文件,并将其内容封装到MAP里,使外部能方便索引。当文件有修改的时候,可以使用执行器设置定时更新任务。
当时用java写的,周末在家看clojure,就想用clojure重写一下这个程序,折腾了一会子,感觉又忘了这个clojure序列的惰性化,遂作罢。周一来公司,又试了一下,还挺顺利,就实现了。
贴出几个主要的实现函数:
先说下文件格式吧,类似这样,我文件里面用的tab分隔符:
12345 America NewYork Jim23455 China Beijing Felix12346 America NewYork Jim23457 China Beijing Felix12349 America NewYork Jim23450 China Beijing Felix主要函数:
;;读取文件并转换成vector(defn read-to-vec [file](with-open [rdr (clojure.java.io/reader file :encoding "gbk")](reduce conj [] (line-seq rdr))))这一步读取后数据是一个vector
["12345\tAmerica\tNewYork\tJim" "23455\tChina\tBeijing\Felix" ...]需要将vecotr内的字符串也转换成vecotor,数据变成voctor的vector,这里使用的是序列
;;将序列转换成序列的序列(defn vec-to-vec [v](map #(seq (.split % "\t")) v))将序列转换成map
;;将序列的序列转化成map(defn vec-to-map [v](into {} (for [x v] (hash-map (first x) x))))这样就得到了最后的map,形如
{"12345" ["12345" "America" "NewYork" "Jim"] "23455" ["23455" "China" "Beijing" "Felix"] ...}
对map的读取就不赘述了。
关于切割字符串,见下图,前者是java方法生成数组,后者是clojure函数生成vector。
比起java来,clojure区区几行代码就实现了大部分功能,开发起来快多了。
0 0
- clojure读取文件->转换Map
- 读取txt文件转换成map,以及将map…
- clojure中的map析构
- java中读取properties文件,并将文件内容转换成map并返回
- Clojure语言十一:map函数
- Clojure专题:文件处理
- 读取文件转换成字符串
- JAVA 读取文件转换字符集
- MapReduce: map读取文件的过程
- 读取XML文件 并转成Map
- Clojure 学习入门(12)- map/pmap
- 读取xml文件转换为json文件
- clojure
- Clojure
- clojure
- clojure
- Clojure
- android 每行读取本地文件并转换为map对象
- iOS 真机调试
- ios如何判断当前网络的运营商
- 网卡驱动9-linux内核3.0.8的mdio_bus\phy_device\phy_driver
- 有道云笔记导入到印象笔记无法同步的问题解决
- 1588分析和实现总纲
- clojure读取文件->转换Map
- NGUI控件说明(中文) UIPlayAnimation
- mybatis 从入门到精通(三)
- 笔记本建立wifi热点
- SAP 寻找增强点的方法
- redis操作list小记
- 导演路学长追悼会 王小帅现身葛优送花圈
- Hive与表操作有关的语句
- Bitmap,byte[],Drawable相互转化