【发布时间】:2016-02-18 17:34:31
【问题描述】:
谁能告诉我如何从具有多个分隔符的 .txt 文件中读取数据。请考虑以下示例以供参考,
////????[011]-[234564]///>>>[ABC]
///??[080]-[42071186]..[DEC]
我的输出应该如下,
迈克 011234564 ABC
哈德利戴维森 08042071186 DEC
感谢和问候, 磨难
【问题讨论】:
谁能告诉我如何从具有多个分隔符的 .txt 文件中读取数据。请考虑以下示例以供参考,
////????[011]-[234564]///>>>[ABC]
///??[080]-[42071186]..[DEC]
我的输出应该如下,
迈克 011234564 ABC
哈德利戴维森 08042071186 DEC
感谢和问候, 磨难
【问题讨论】:
我们可以使用readLines 读取它,然后使用正则表达式删除不需要的字符
gsub('(?<=[0-9])\\s+(?=[0-9])|^\\s+|\\s+$', '',
gsub('[[:punct:]]+', ' ', lines), perl=TRUE)
#[1] "Mike 011234564 ABC" "Hardley davidson 08042071186 DEC"
或者如果模式相似,我们可以使用单个sub
sub(".*\\<([^> ]+)[^0-9]+([0-9]+)[^0-9]+([0-9]+)[^A-Z]+([A-Z]+).*",
"\\1 \\2\\3 \\4", lines)
#[1] "Mike 011234564 ABC" "davidson 08042071186 DEC"
lines <- readLines(textConnection("< Mike >////????[011]-[234564]///>>>[ABC]
< Hardley davidson >///??[080]-[42071186]..[DEC]"))
【讨论】:
lines <- readLines('yourfile.txt'),然后使用sub 进行更改。但是,如果您使用的是linux 系统,甚至没有读取数据集,awk/sed 还有其他选项