我想扫描 R 中的多个文件中的字符串,并知道哪些文件名具有该字符串。
有没有办法在函数中使用 grep、cat、readLines 之类的东西来做到这一点?
如果我使用以下方式扫描文件:
fileNames <- Sys.glob("*.csv")
Run Code Online (Sandbox Code Playgroud)
那么也许是这样的:
for (f in fileNames) {
stuff <- read.csv(fileName, sep = ",")
grep("string")
}
names(res) <- substr(filenames, 1, 30)
Run Code Online (Sandbox Code Playgroud)
或者更好的是,像这样的循环:
for( f in filenames ){
cat("string", file=f)
}
for( f in filenames) {
cat(readLines(f), sep="\n")
}
Run Code Online (Sandbox Code Playgroud)
这段代码不起作用,我只是想仔细考虑一下。我确信有更好的方法可以做到这一点。这听起来很简单,但我无法做到正确。
我想扫描文件中的字符串,然后输出找到该字符串的文件名。我还没有找到在 R 中执行此操作的示例。
建议?
请注意,在您的第一个代码示例中,您f在使用的循环内部使用循环变量fileName(R 也是区分大小写的,因此fileNames它们filenames是不同的对象)。
如果您的搜索字符串不太可能包含 CSV 分隔符,您确实可以readLines(..)与 一起使用grep(..)。grep(..)然后返回字符串出现的行号列表。尝试以下代码:
fileNames <- Sys.glob("*.csv")
for (fileName in fileNames) {
if (length(grep("string", readLines(fileName))) > 0) { print(fileName)}
}
Run Code Online (Sandbox Code Playgroud)