grep (), str_match () для сопоставления строки [DATA] в файле и чтения содержимого под ним после того, как совпадение найдено - PullRequest
1 голос
/ 08 июля 2019

Попытка прочитать *.BAY файл, формат которого не разделен запятой, пробелом и табуляцией. Необходимо найти соответствие для строки [ДАННЫЕ] и прочитать все содержимое ниже после того, как совпадение найдено.

Ниже приведено содержимое файла

[FILEINFO] VERSION = V4.0 FILENAME = TEST1.BAY CREATIONTIME = 2017-10-05 16: 05: 28

[PARAMETER1] TXT = SENSITIVE Unit = LSL = -41.800000 USL = -38.300000

[PARAMETER2] TXT = единица вреда = LSL = -1.000000 USL = 1.000000

[DATA] 1,29, -41.699,0.075, -1,642, -97.207,55.608,0.533,165.848,0.000,0.000,60.000 2,29, -40.637,0.126, -1,934, -96.637,56.100,0.649,153.259,0.000,1.000,60.000 3,29, -40.227,0.052, -1,850, -96.231,56.104,0.548,158.987,0.000,2.000,60.000

Я использовал приведенный ниже код для чтения файла.

my_txt <- paste(readLines("/TEST1.BAY)        
my_txt

Я использовал функцию grep() для поиска [ДАННЫЕ] строка. Тем не менее, после grep с нижним паттерном я получаю только integer(empty).

my_txt <- grep("^[DATA.*]$",my_txt)
my_txt

Любое предложение, чтобы соответствовать шаблону и прочитать содержание ниже [ДАННЫЕ]

Ответы [ 2 ]

2 голосов
/ 08 июля 2019

Предполагая, что вы уже прочитали данные в виде строки, вы можете удалить все до "[DATA"], а затем использовать read.csv

read.csv(text = sub(".*\\[DATA\\]\\s+", "", my_txt), header = FALSE)

#  V1 V2      V3    V4     V5   ....  
#1  1 29 -41.699 0.075 -1.642   ....

Это даст вам все данные в отдельных столбцах.Если вы хотите, чтобы они были в одном столбце, замените запятые на новую строку "\n"

read.csv(text=gsub(",", "\n", sub(".*\\[DATA\\]\\s+", "", my_txt)), header = FALSE)

#         V1
#1         1
#2        29
#3   -41.699
#4     0.075
#5    -1.642
#....
1 голос
/ 08 июля 2019

Возможный метод с strsplit

# read data
my_txt <- paste(readLines("clipboard"), collapse = "")      
my_txt

# split in two strings when there is "[DATA]"
my_txt <- strsplit(my_txt, "[DATA]", fixed = TRUE)

# get second string
my_txt <- my_txt[[1]][2]

# convert to vector of numeric
data <- as.numeric(strsplit(my_txt, ",")[[1]])
...