Как разбить текстовый файл в R на основе блоков текста после счетчика ввода? - PullRequest
0 голосов
/ 11 ноября 2019

Мне нужно написать программу на R, которая будет разбивать текстовый файл на основе строки, начинающейся с шаблона, включая строки после этого шаблона до следующего шаблона (тела). Если общее количество строк превышает 10 КБ, разбейте файл на файлы по 10 КБ, начиная со строки шаблона и включая тело этого шаблона. Если последняя строка начинается в теле этого шаблона, разделите его в начале предыдущего шаблона.

Пример текстового файла:

"GROUP"; "DETAILA1"; "DETAILA2";
"BODY"; "DETAILA11"; "DETAILA21";
"BODY"; "DETAILA12"; "DETAILA22";
"BODY"; "DETAILA13"; "DETAILA23";
"BODY";
"GROUP"; "DETAILB1"; "DETAILB2";
"BODY"; "DETAILB11"; "DETAILB21";
"BODY"; "DETAILB12"; "DETAILB22";
"WORD"; "DETAILB13"; "DETAILB33";
"PRINT";
"GROUP"; "DETAILA1"; "DETAILA2";
"BODY"; "DETAILC11"; "DETAILC21";
"WORD"; "DETAILC12"; "DETAILC22";
"BODY"; "DETAILC13"; "DETAILC23";
"PRINT";
…
file_path <- '.\\Input.txt'

# Read blocks of lines ... 
raw_notice <- file(file_path, open = "r")
line_vec <- c()
start_patt <- "[[:punct:]]+[GROUP]"

# What I tested so far
# Start of loop
while(TRUE){
  # Read each line of the file
  notice_line = readLines(raw_notice, n=1)

  # Start of conditional
  if(length(notice_line) == 0) # Account for blank lines
    break
  else if (grepl(start_patt, notice_line)) # IF this start_pattern exists in line of file
    line_vec <- c(line_vec, notice_line) # Then add the line to the file ** NOT WHAT WE WANT BUT CHECK IF CONDITIONAL WORKS
  else
    print("Not there")
}

# and split into new file
# pseudo code
split.file <- function (file) {
  if length(file) > 10000
    if last_line == pattern
      pattern_body <- seq(pattern, next_pattern)
      splitFile(file, by=pattern_body)
      new_file1 <- c(pattern_body)
    else if last_line == pattern_body
      splitFile(file, by=previous_pattern_body)
    else
      break
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...