我需要从文件之间以不同结构的文本文件中提取信息。虽然这可以使用宏来完成,因为文件是可变的,按行号选择。并且所有文件中的行间距不成功。
我想知道是否有人能告诉我是否有解析txt文件和按关键字搜索并在关键字后提取信息的方法?例如Flow Rate:99.99之类的东西,我想提取99.99。 另一个问题是,使用Flow Rate示例,Flow Rate会在每个文件中出现多次。有没有办法别名/索引流量:所以我可以选择,比如,第三次出现?
欢迎任何提示或提示。我知道在识别关键字时如何打印整行,而不是如何处理多次出现,并且仅在关键字后面选择数字:
all_data = readLines("Unit 5 2013.txt")
hours_of_operation <- grep("Annual Hours of Operation: ",all_data)
all_data[hours_of_operation]
[1] " Annual Hours of Operation: 8760.0 hours/yr"
谢谢
Ĵ
答案 0 :(得分:3)
我猜你要解析的每一行都有一个数据点。如果是这样,您可以将数据读入向量并使用grepl()
函数查找具有所需内容的向量的所有实例。
例如,你有数据:
lhr: time to departure 5:00
dfw: time to arrival 4:40
jfk: time to arrival 5:50
dfw: time to departure 6:00
lax: time to departure 6:00
你想要取出&#34; dfw:&#34;然后你做的条目
data = readLines("file.txt")
data[grepl("dfw: ", data)]
如果您想要第二个条目,那么
data[grepl("dfw: ", data)][2]
答案 1 :(得分:1)
以下内容可能有所帮助。我假设你把文字带到了字符向量
数据示例
注意:如果&#34;流量&#34;在大写字母中,您可能需要先使用tolower(ex)
ex<-c("The annual observed flow rate: 99.99")
Regexpr&amp; Regmatches 强>
此处regexpr在句点之前和之后搜索带有两位数的数字。
res<-regmatches(ex, regexpr("[0-9]{1,2}.[0-9]{1,2}",ex))
使用位置参数
另一种方法是使用库cwhmisc。该解决方案搜索单词&#34; rate&#34;的开始位置。期待5个位置之后您需要的数字可能会对该数字进行子串。
library(cwhmisc)
A<-cpos(ex,"rate", start=1) #position in string
res<-substr(ex, start=A+5, stop=A+9)
如果流量出现多次
将向量的元素拆分为子串并像以前一样捕获数字。
ex<-c("The annual observed flow rate: 99.99; the monthly flow rate: 90.03; the weekly observed flow rate: 92.22")
ndat<-unlist(strsplit(ex, "flow"))