R 从文本文件中提取数据

R 从文本文件中提取数据,r,R,在其他语言中似乎也有类似的问题,但我在R中找不到 我在一个目录的子目录中有许多文本文件;它们都有扩展名(.log),并且包含文本和数据的混合。我想从这些相对较大的文件中提取几行 例如,一个文件如下所示 blahblahblah NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS = 210 blahblahblah ----------------------------------------<br /> CPU timing in

在其他语言中似乎也有类似的问题,但我在R中找不到

我在一个目录的子目录中有许多文本文件;它们都有扩展名(.log),并且包含文本和数据的混合。我想从这些相对较大的文件中提取几行

例如,一个文件如下所示

blahblahblah

NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS =  210

blahblahblah

 ----------------------------------------<br />
 CPU timing information for all processes<br />
 ========================================<br />
 0: 8853.469 + 133.948 = 8987.417<br />
 1: 8850.817 + 126.587 = 8977.405<br />
 2: 8851.925 + 128.576 = 8980.501<br />
 3: 8847.992 + 125.871 = 8973.864<br />
 ----------------------------------------<br />
 ddikick.x: exited gracefully.<br />

blahblahblah
blahblahblah
笛卡尔-高斯基函数数=210
布拉布拉布拉赫
----------------------------------------
所有进程的CPU定时信息
=======================================================
0:8853.469+133.948=8987.417
1:8850.817+126.587=8977.405
2:8851.925+128.576=8980.501
3:8847.992+125.871=8973.864
----------------------------------------
ddikick.x:优雅地退出。
布拉布拉布拉赫
我想获取基函数的数量(本例中为210)和CPU时间的总量

“笛卡尔-高斯基函数数”行对于每个文件都是唯一的;也就是说,如果我在文本编辑器中打开文件并使用此字符串进行搜索,我只返回这一行。类似于“所有进程的CPU定时信息”和“优雅退出”

我很感激我似乎没有做很多事情来帮助自己,但我只是不知道从哪里开始。如果有人能给我指出正确的方向,我希望能填补剩下的空缺

在@Ben(见下文)向我提供帮助后,我最终使用了以下代码

filesearch <- function (x) {

f <- readLines(x)
cline <- grep("NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS",f,
                    value=TRUE)
val <- as.numeric(str_extract(cline,"[0-9]+$"))
coline <- grep("^ +CPU timing information", f)
numstr <- sapply(str_extract_all(f[coline+2:5],"[0-9.]+"),as.numeric)
cline1 <- sum(numstr[4,])/60
output <- c(val, cline1)
return(cat(output,"\n"))
}
filesearch可能

库(stringr)

f
?readLines
grep
stru extract
stringr
包中提取应该可以…@Justin下面的代码,>a谢谢,我会在几小时内完成,明天回来报告。嗨@Ben,如果我将readLines的结果存储如下,嗨@Ben,如果我将readLines的结果存储如下,a您忘记了
grep
value=TRUE
参数,这很关键。我编辑了我的答案,试图让它更清楚。Hi@Ben-代码的另一部分numstr返回list()。向上一行,cline返回整数(0)。我会继续涂鸦,然后回来报到。
library(stringr)
f <- readLines("datafile.txt")
cline <- grep("NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS",f,
                    value=TRUE)
val <- as.numeric(str_extract(cline,"[0-9]+$"))
cline <- grep("^ +CPU timing information",f)
(numstr <- sapply(str_extract_all(f[cline+2:5],"[0-9.]+"),as.numeric))
##         [,1]     [,2]     [,3]     [,4]
## [1,]    0.000    1.000    2.000    3.000
## [2,] 8853.469 8850.817 8851.925 8847.992
## [3,]  133.948  126.587  128.576  125.871
## [4,] 8987.417 8977.405 8980.501 8973.864