3

我在 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")

谢谢

4

2 回答 2

3

正如 nograpes 已经建议的那样,您可以使用以下代码:

line[grep("Delimiter1", line, fixed = TRUE):grep("Delimiter2", line, fixed = TRUE)]

每个都grep应该返回包含命名分隔符的行的索引。该fixed参数确保您不必担心分隔符字符串中的特殊正则表达式语法。如果多次找到任一字符串,代码将中断。

于 2012-09-27T21:34:30.207 回答
2

如果您的分隔符是唯一的(看起来),您可以使用例如此功能:

#' 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"
于 2012-09-27T23:14:34.120 回答