返回目录中文件的clojure函数

我想做一个clojure函数,返回一个目录中今天被改变的文件.它是功能的一部分=>给我所有今天被改变的文件,在文件中循环并寻找一个特定的值。同时列出文件和带有该值的行。

我得到了解析部分+列出行文件的工作,以及 “改变的文件”,然而我很难将两者合并。

到目前为止,我设计的查找更改文件的函数是。

(defn returnfilelist
"returns all the files changed today in a directory"
[d]
(def dir (io/file d))
  (def files (for [file (file-seq dir) :when (= (datetostr (Date.(.lastModified file))) (datetostr (new Date))) ](str file  )))
(doseq [f files] (println f) )) ;; <==== this indeed shows the files changed today...

我创建了datetostr函数来进行实际的日期比较。

(defn datetostr [date]
 (str (.format (java.text.SimpleDateFormat. "yyyyMMdd")(.getTime date))))

这个函数确实列出了所有今天修改过的文件 我现在想做的是把 “文件 “传入一个函数,比如:

(defn readdir [d]
 (ff/returnfilelist d)) ;; more to add...

这样的函数中进行进一步的处理。

我希望能得到一些帮助,我可能监督的东西很简单,却让我烦了几个小时了。我一直在clojure文档和互联网上搜索,然而我没有找出正确的搜索表达式来得到答案。

方向已经足够了,我喜欢学习,而且我对clojure的编程相当陌生。

解决方案:

有几件事。

  1. returnfilelist使用 def 内的函数。 def 定义并绑定软件包全局命名空间中的符号,这几乎不是你想要做的。在包的全局命名空间中定义和绑定符号,这几乎不是你想要做的。let 而不是函数本地符号绑定。
  2. returnfilelist 从未实际返回过它所计算的内容。 函数中涉及 doseq 的最后一条语句实际上是返回 nil。 你可能想要返回文件。

下面是经过适当修改的 returnfilelist (我尽可能地保持它与您的原始实现接近,以说明让您的代码工作的关键变化:其他答案使用了 filter 更为习惯,应该是首选)。)

(defn returnfilelist
  "returns all the files changed today in a directory"
  [d]
  (let [dir (io/file d)
        files (for [file (file-seq dir) 
                    :when (= (datetostr (Date.(.lastModified file))) 
                             (datetostr (new Date)))]
                (str file))]
    (doseq [f files] (println f)) ;; leaving this in for debugging
    files)) ;; <--- the actual return value

…然后readdir就变成了:

(defn readdir [d]
  (let [todays-files (ff/returnfilelist d)] 
  ;; more to add...
))

给TA打赏
共{{data.count}}人
人已打赏
未分类

Pixi.js v5 - 将alpha应用到位移图上

2022-9-9 17:36:18

未分类

在SQL查询中使用CTE递归与在C#中使用递归的对比

2022-9-9 17:36:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索