r - R - 使用自定义行分隔符导入包装的 .txt 文件
问题描述
我正在尝试将 .txt 文件导入 R,其中行分隔符表示为“\”,列分隔符表示为“*”。但是,每一行都是换行的,我找不到设置自定义行分隔符的函数。
真正的文件是我公司的银行 822 edi 文件(大约 10,000 行),所以我无法显示实际文本。但是,当您下载这些文件时,美国银行不会解开这些文件。
我尝试导入的 .txt 文件如下所示:
示例文本文件 |
---|
1*AAA*2*BBB\2*CC |
C*3*DDD |
我希望它看起来像这样:
Col1 | Col2 | Col3 | Col4 |
---|---|---|---|
1 | AAA | 2 | BBB |
2 | CCC | 3 | DDD |
我一直无法找到执行此操作的功能,因此将不胜感激任何帮助。谢谢你。
解决方案
弄清楚了。可能是一种更清洁的方法,但由于没有人回答,我会留下我的解决方案,以防其他人遇到这个问题。
首先,我将整个文本文件作为字符串导入:
filename <- 'BOA 2020-12.txt'
import.dat <- readChar(filename, file.info(filename)$size)
然后我删除了当前的换行符:
import.dat <- gsub('[\r\n]','',import.dat)
然后我用新的换行符替换“\”
import.dat <- gsub('[\r\\]','\n',import.dat)
现在我有一个干净的字符串可以解析出来。接下来,我将字符串拆分为每个换行符的单列矩阵。
import.dat <- unlist(strsplit(import.dat,split='\n'))
在这种特定情况下,每一行都有不同长度的列,所以我创建了一个零矩阵(17 是列的最大长度。可以插入它,因为这些类型的文档总是最多有 17 列)并运行为每一行嵌套for循环并填充列。
sub.dat <- as.data.frame(matrix(0,ncol=17,nrow=length(import.dat)))
for(i in 1:length(import.dat)){
temp <- unlist(strsplit(import.dat[i],split='\\*'))
for(j in 1:length(temp)){
sub.dat[i,j] <- temp[j]
}
}
轰隆隆,轻而易举。