【问题标题】:How to Recursively Read Multiple Files from a Directory?如何从目录中递归读取多个文件?
【发布时间】:2020-03-13 10:09:53
【问题描述】:

球拍/方案问题

背景:
我有 1 个主目录,有 12 个子目录和 40 多个文件,扩展名为:.faa

目标: - 递归读取扩展名为 .faa 的子目录中的所有文件 - 对于每个等于 #> 的读取字符,添加 1 并返回具有匹配扩展名 .faa 的所有文件的 #> 总数

(define scrape-directory
  (lambda (path)
    (for ([f (in-directory path)] #:when (regexp-match? "\\.faa$" f))
      < HELP HERE > ))


【问题讨论】:

  • 您是否遇到了更具体的部分?看来你已经大致弄清楚了?

标签: file-io functional-programming scheme racket


【解决方案1】:

首先,我建议使用path-has-extension? 而不是regexp-match

接下来,只要你遍历的文件不是很大,你可以使用file-&gt;string来获取文件内容作为字符串。从那里,您可以使用regexp-match* 获取字符串中所有#&gt; 的列表,并使用lengthadd1 组合来获取您想要的数字。1

最后,您可以将所有这些包装到一个 for/fold 中,以获得所有文件的总值。

生成的代码将如下所示:

(define (scrape-directory path)
  (for/fold ([acc 0])
            ([f (in-directory path)] #:when (path-has-extension? f ".faa"))
    (define text (file->string f))
    (define file-total (add1 (length (regexp-match* #rx"#>" text))))
    (+ acc file-total)))

1如果文件真的很大,你也可以只用词法分析器,比如parser-tools/lex库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2018-03-05
    相关资源
    最近更新 更多