【发布时间】:2015-03-17 16:14:53
【问题描述】:
我想使用 grep、grepl 和 regexpr 自动从文本文件中提取某些信息。当我为每个单独的文件执行此操作时,我有一个可以工作的代码,但是我无法让循环工作,以自动化我工作目录中所有文件的过程。
由于数据的结构,我将 txt 文件作为字符串读取。该循环似乎会根据目录中的文件数多次迭代第一个文件,这显然是因为for 语句中的length(txtfiles)command。
txtfiles = list.files(pattern="*.txt")
for (i in 1:length(txtfiles)){
all_data <- readLines(txtfiles[i])
#select hours of operation
hours_op[i] <- all_data[hours_of_operation <- grep("Annual Hours of Operation:",all_data)]
hours_op[i] <-regmatches(hours_op, regexpr("[0-9]{1,9}.[0-9]{1,9}",hours_op))
}
如果有人能指出正确的方向来为每个文件重复此例程,而不是多次重复同一个文件,我将不胜感激。我想得到一个文件名列表和相应的hours_op。
【问题讨论】:
-
您是否检查了变量
txtfiles以确保您没有捕获文本文件的备份副本?您可以使您的模式更具体(例如"\\.txt$"),因为模式参数被解释为正则表达式。 ($字符强制使用文件名的结尾,因此您不会获得带有.txt~之类的扩展名的备份副本)。您还可以排除任何以点开头的隐藏文件,如下所示:pattern='^[^.].*\\.txt$' -
@Jthorpe 是的,我尝试了这个但没有运气,同样的事情。另外我有多个警告:要替换的项目数不是替换长度的倍数。