# 若 test.txt 內容如下
1234567 12345678 12345678901234
sdfas sdfd sadf asdfasdff
asgsdfas df
asdfsd fsgsd sdfasgsd
asdfsd fsgsd sdfasgsd df
sdfgasd fsf sa
dfsdffdfa
# 其中有三個欄,最大長度分別是 8 9 14
# 有斷一次和斷二次的情況
# 最後有一個全空白的列會比較好
library(data.table)
library(magrittr)
d <-
read.fwf(
"test.txt",
c(8, 9, 14), # 指定各欄最大寬度
header = F,
strip.white = T, # 清除多餘空白
stringsAsFactors = F # 不要字串轉因子
) %>%
as.data.table()
# 若 V1 和 V2 同時為空字串則視為斷列情況並把 V3 往上一列加到尾巴
# 整個過程是由最末列做到最前列,方便處理超過一個斷列的情況
for (i in rev(which(d[, "V1"] == "" & d[, "V2"] == ""))) {
set(d, i-1L, "V3", paste0(d[i-1L, ]$`V3`, d[i, ]$`V3`))
}
d[V1 != "" & V2 != ""] # 為所求
# V1 V2 V3
# 1: 1234567 12345678 12345678901234
# 2: sdfas sdfd sadf asdfasdffasgsdfas df
# 3: asdfsd fsgsd sdfasgsd
# 4: asdfsd fsgsd sdfasgsd dfsdfgasd fsf sadfsdffdfa
IyDoi6UgdGVzdC50eHQg5YWn5a655aaC5LiLCjEyMzQ1NjcgMTIzNDU2NzggMTIzNDU2Nzg5MDEyMzQKc2RmYXMgICBzZGZkICAgICBzYWRmIGFzZGZhc2RmZgogICAgICAgICAgICAgICAgIGFzZ3NkZmFzIGRmCmFzZGZzZCAgZnNnc2QgICAgc2RmYXNnc2QKYXNkZnNkICBmc2dzZCAgICBzZGZhc2dzZCAgIGRmCiAgICAgICAgICAgICAgICAgc2RmZ2FzZCBmc2Ygc2EKICAgICAgICAgICAgICAgICAgZGZzZGZmZGZhCgojIOWFtuS4reacieS4ieWAi+ashO+8jOacgOWkp+mVt+W6puWIhuWIpeaYryA4IDkgMTQKIyDmnInmlrfkuIDmrKHlkozmlrfkuozmrKHnmoTmg4Xms4EKIyDmnIDlvozmnInkuIDlgIvlhajnqbrnmb3nmoTliJfmnIPmr5TovIPlpb0KCmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeShtYWdyaXR0cikKCmQgPC0gCiAgcmVhZC5md2YoCiAgICAidGVzdC50eHQiLCAKICAgIGMoOCwgOSwgMTQpLCAgICAgICAgICAgIyDmjIflrprlkITmrITmnIDlpKflr6zluqYKICAgIGhlYWRlciA9IEYsICAgICAgICAgIAogICAgc3RyaXAud2hpdGUgPSBULCAgICAgIyDmuIXpmaTlpJrppJjnqbrnmb0KICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGICMg5LiN6KaB5a2X5Liy6L2J5Zug5a2QIAogICkgJT4lCiAgYXMuZGF0YS50YWJsZSgpCgojIOiLpSBWMSDlkowgVjIg5ZCM5pmC54K656m65a2X5Liy5YmH6KaW54K65pa35YiX5oOF5rOB5Lim5oqKIFYzIOW+gOS4iuS4gOWIl+WKoOWIsOWwvuW3tAojIOaVtOWAi+mBjueoi+aYr+eUseacgOacq+WIl+WBmuWIsOacgOWJjeWIl++8jOaWueS+v+iZleeQhui2hemBjuS4gOWAi+aWt+WIl+eahOaDheazgQpmb3IgKGkgaW4gcmV2KHdoaWNoKGRbLCAiVjEiXSA9PSAiIiAmIGRbLCAiVjIiXSA9PSAiIikpKSB7CiAgICBzZXQoZCwgaS0xTCwgIlYzIiwgcGFzdGUwKGRbaS0xTCwgXSRgVjNgLCBkW2ksIF0kYFYzYCkpCn0KCmRbVjEgIT0gIiIgJiBWMiAhPSAiIl0gIyDngrrmiYDmsYIKIyAgICAgICAgIFYxICAgICAgIFYyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMwojIDE6IDEyMzQ1NjcgMTIzNDU2NzggICAgICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0CiMgMjogICBzZGZhcyAgICAgc2RmZCAgICAgICAgICAgIHNhZGYgYXNkZmFzZGZmYXNnc2RmYXMgZGYKIyAzOiAgYXNkZnNkICAgIGZzZ3NkICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGZhc2dzZAojIDQ6ICBhc2Rmc2QgICAgZnNnc2Qgc2RmYXNnc2QgICBkZnNkZmdhc2QgZnNmIHNhZGZzZGZmZGZh