library(magrittr) # 有pipe用，沒其它作用

# 還原原始資料文字檔為dt.txt
txt <- "V1
LAYER: 34 ;
DATATYPE: 0 ;
0;0
10;0
10;0.9
0;0.9
0;0
LAYER: 34 ;
DATATYPE: 0 ;
0;9.1
10;9.1
10;10
0;10
0;9.1
LAYER: 44 ;
DATATYPE: 10 ;
9.52;1.3
9.8;1.3
9.8;9.1
9.52;9.1
9.52;1.3
"
cat(txt, file = "dt.txt")

# 讀文字檔並做初步清理
con <- file("dt.txt", "r")
txt <- readLines(con)[-1] %>% gsub("( +;$)|( +)", "", .)
close(con)

# 捉到LAYER列與DATATYPE列及其資料
r.layer <- grep("^LAYER:[[:digit:]]+$", txt)
c.layer <- txt[r.layer] %>% gsub("LAYER:", "", .) %>% as.integer
r.datatype <- grep("^DATATYPE:[[:digit:]]+$", txt)
c.datatype <- txt[r.datatype] %>% gsub("DATATYPE:", "", .) %>% as.integer

# 捉出每一群有幾項
n <- diff(c(r.layer, length(txt)+1)) - 2

data.frame(
  V1 = txt[-c(r.layer, r.datatype)],
  group = rep.int(1:length(n), n),
  `L;D` = paste0(c.layer, ";", c.datatype) %>% rep(., n)
)
