Начните читать текстовый файл после выполнения условия - PullRequest
0 голосов
/ 31 октября 2018

Я новичок в программировании на R, поэтому любая помощь приветствуется и высоко ценится.

У меня есть выходной файл с большим количеством результатов, и я хочу начать чтение со следующей строки "Ann. Exc. Prob. EMA Est. V [log (EMA)] На месте Est. CI-Low CI-High" и останавливается, как только появляется строка без текста. Есть другие типы файлов, которые могут быть прочитаны, поэтому существует список. Текстовый файл можно увидеть на изображении Текстовый файл изображения . Еще раз спасибо за помощь.

Я пытался использовать этот код

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]))
  } 
}

EDIT

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 голосов
/ 01 ноября 2018

Я не думаю, что 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 будет содержать более одного числа, и вы должны добавить правило для выбора значения mimimun, которое больше start.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...