球拍/方案问题
背景:
我有1个主目录,带有12个子目录和40多个文件,扩展名:.faa
目标: -递归地读取扩展名为.faa的子目录中的所有文件 -对于等于#>的每个read-char,加1并在所有扩展名为.faa
的文件中返回#>的总数(define scrape-directory
(lambda (path)
(for ([f (in-directory path)] #:when (regexp-match? "\\.faa$" f))
< HELP HERE > ))
答案 0 :(得分:1)
首先,我建议在path-has-extension?
上使用regexp-match
。
接下来,如果要遍历的文件不大,则可以使用file->string
以字符串形式获取文件的内容。从那里,您可以使用regexp-match*
来获取字符串中所有#>
的列表,并使用length
组成的add1
来获取所需的号码。 > 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
库。