Предположим:
- вход, воспроизводимый в примечании в конце
- строки имени таблицы - это единственные строки с -
- содержимое таблицы и строки заголовка - единственные строки с запятой
- мы можем удалить начальную строку в любой строке, начиная с
Считайте строки в L
(в действительности замените аргумент именем файла) и извлеките имя таблицы, строки заголовка и содержимого и удалите все начальные запятые, дающие goodLines
. Определите позиции имен таблиц iNames
в них, а затем сами получите Names
. Затем разбейте goodLines, за исключением имен таблиц, на список символьных векторов s
и прочитайте каждый при правильной настройке имен компонентов.
# L <- readLines("myfile.dat")
L <- readLines(textConnection(Lines))
goodLines <- sub("^,", "", grep("--|,", L, value = TRUE))
iNames <- grepl("--", goodLines)
Names <- sub(" --.*", "", goodLines[iNames])
s <- split(goodLines[!iNames], cumsum(iNames)[!iNames])
setNames(lapply(s, function(x) read.csv(text = x)), Names)
с указанием следующего списка фреймов данных:
$`Table A`
a b c
1 1 2 3
2 4 5 6
$`Table B`
a b c
1 1 2 3
2 4 5 6
Примечание
Lines <- "
junk
junk
Table A -- Monthly
,a,b,c
1,2,3
4,5,6
Table B -- Monthly
,a,b,c
1,2,3
4,5,6
junk
junk"