首页 > 解决方案 > 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

我一直无法找到执行此操作的功能,因此将不胜感激任何帮助。谢谢你。

标签: rimport

解决方案


弄清楚了。可能是一种更清洁的方法,但由于没有人回答,我会留下我的解决方案,以防其他人遇到这个问题。

首先,我将整个文本文件作为字符串导入:

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]
    }
  }

轰隆隆,轻而易举。


推荐阅读