我在R中读过.txt文件,文本由制表符和\ n分隔。我想要的是找到我可以找到单词“Delimiter1”的行号,并提取该信息直到“Delimiter2”。 这里的问题是这个词的格式是:
\tab \tab \n
Delimiter1 from data\tab\tab\n
\tab\tab\data1 \tab data2 \n
\tab\tab\data2 \tab data2 \n
.....
Delimiter2 from data\tab\tab\n
......
我尝试了pmatch(),但根本没有运气。这是架构的草稿:
fileName="text_all.txt"
conn=file(fileName,open="r")
line=readLines(conn)
tabd<-strsplit(line,"\t")
由于
答案 0 :(得分:3)
正如nograpes已经建议的那样,你可以按照这些方式使用代码:
line[grep("Delimiter1", line, fixed = TRUE):grep("Delimiter2", line, fixed = TRUE)]
每个grep
都应该返回包含命名分隔符的行的索引。 fixed
参数确保您不必担心分隔符字符串中的特殊正则表达式语法。如果多次找到任一字符串,代码将会中断。
答案 1 :(得分:1)
如果您的分隔符是唯一的(看起来像),您可以使用例如这个功能:
#' Text between delimiters
#' @param x character vector
#' @param tag1 start delimiter
#' @param tag2 stop delimiter
#' @return character vector
lines.between.tags <- function(x, tag1, tag2)
x[do.call(seq, as.list(grep(paste(tag1, tag2, sep = '|'), x)))]
简单示例:
> text <- c('foo', 'Delimiter1 from data \t \n', 1:5, 'Delimiter2 from data \t \n', 'bar')
> lines.between.tags(text, 'Delimiter1', 'Delimiter2')
[1] "Delimiter1 from data \t \n" "1"
[3] "2" "3"
[5] "4" "5"
[7] "Delimiter2 from data \t \n"