满足条件后开始阅读文本文件

时间:2018-10-31 20:44:41

标签: r

我是R语言编程的新手,因此欢迎您提供任何帮助,并深表感谢。

我有一个输出文件,该文件有很多结果,我想从下一行开始阅读 “ Ann。Exc。Prob。EMA Est。V [log(EMA)]现场估算CI-Low CI-High” 并在没有文本的行时停止。可以读取其他类型的文件,这就是为什么有一个列表的原因。文本文件可以在图像Text file image中看到。再次感谢您的所有帮助。

我尝试使用此代码

LoadFFA <- function(filename, folder.out, TYPE = "PeakFQ_17C",
                    colStandard = TRUE){ # standardize column output names



fileinput<-file.path(folder.out,filename)
fileinput<c(fileinput)

require(data.table)
  if(grepl("PEAKFQSA",TYPE)){ # PeakfqSA Bulleting 17C analysis
    text.list<-lapply(fileinput,readLines)
    skip.rows<-sapply(text.list, grep, pattern = '^Ann. Exc. Prob.\\s+EMA Est.')-1

    PFA<-lapply(seq_along(text.list),function(i) fread(fileinput[i],skip=skip.rows[i]))
  } 
}

编辑

require(data.table)
      if(grepl("PEAKFQSA",TYPE)){ # PeakfqSA Bulleting 17C analysis
        text.list<-lapply(fileinput,readLines)
        skip.rows<-sapply(text.list, grep, pattern = '^Ann. Exc. Prob.\\s+EMA Est.')-1
        PFA<-lapply(seq_along(text.list),function(i) read.delim(fileinput[i],skip=skip.rows[i]))
      } 
    }
    print(PFA)

1 个答案:

答案 0 :(得分:0)

我认为R无法根据条件开始读取文件。但是,您可以读取整个文件,然后删除不符合条件的行。

为此,您可以使用scan()。此函数逐行读取文件。阅读完整个文件后,您可以轻松找到与描述匹配的行。假设您的文件名为text.txt:

file = scan("text.txt") #read entire file
start = which(file ==  " Ann. Exc. Prob. EMA Est. V[log(EMA)] At-Site Est. CI-Low CI-High")
end = which(file == "")

file.clean = file[start:end]

此代码假定只有一行完全为空。如果没有,end将包含多个数字,并且您必须添加一条规则以选择大于start的虚拟值。