我有一个制表符分隔的文件,其中一列偶尔有没有被转义的换行符(用引号括起来):
JOB REF Comment V2 Other
1 3 45 This was a small job NULL sdnsdf
2 4 456 This was a large job and I have to go onto a new line,
but I didn't properly escape so it's on the next row whoops! NULL NULL
3 7 354 NULL NULL NULL
# dat <- readLines("the-Dirty-Tab-Delimited-File.txt")
dat <- c("\tJOB\tREF\tComment\tV2\tOther", "1\t3\t45\tThis was a small job\tNULL\tsdnsdf",
"2\t4\t456\tThis was a large job and I have\t\t", "\t\"to go onto a new line, but I didn't properly escape so it's on the next row whoops!\"\tNULL\tNULL\t\t",
"3\t7\t354\tNULL\tNULL\tNULL")
我知道这可能是不可能的,但这些坏的换行符只出现在一个字段(第 10 列)中。我对 R(首选)或 python 中的解决方案感兴趣。
我的想法是引入一个正则表达式,在 10 个且只有 10 个制表符之后寻找换行符。我首先使用readLines
并尝试删除出现在空格+单词末尾的所有换行符:
dat <- gsub("( [a-zA-Z]*)\t\n", "\\1", dat)
但似乎很难扭转readLines
. 我应该做什么?
编辑:有时会出现两个换行符(即用户在评论字段中的段落之间放置了一个空行。下面是一个示例(所需的结果是应该将其制成单行)
140338 28855 WA 2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1 NULL NULL NULL NULL NULL NULL NULL NULL 1000 NULL NULL NULL NULL NULL NULL YNNNNNNN (Some text with two newlines)
The remainder of the text beneath two newlines NULL NULL NULL 3534a NULL email NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL