当前位置: 首页 > 知识库问答 >
问题:

记录读取器拆分,将固定长度转换为分隔的ASCII文件

白芷阳
2023-03-14

我有一个128 MB的文件,所以它被分成两个块(块大小=64 MB)。我正在尝试使用自定义记录读取器类将固定长度的文件转换为分隔的ASCII文件

Ex: 
First Split: 456   2348324534         34953489543      349583534
Second Split:
456         23           48324534             34953489543      349583534
FixedAsciiRecordReader(FileSplit genericSplit, JobConf job) throws IOException {
if ((start % recordByteLength) > 0) {
              pos = start - (start % recordByteLength) + recordByteLength;
           }
           else {
              pos = start;
           }

           fileIn.skip(pos);
}

是否也应该将任何值设置为start变量?

共有1个答案

席兴朝
2023-03-14

我找到了这个问题的解决方案,我在输入的固定长度文件中有一个可变长度的头,它没有被跳过,所以位置并不完全从记录的开头开始,而是从位置(startofrecord-headerlength)开始。这使得每条记录从前一条记录中读取几个字符(相当于headerlength)。

更新代码:

 if ((start % recordByteLength) > 0) {
        pos = start - (start % recordByteLength) + recordByteLength + headerLength;
    }
    else {
        pos = start;            
    }

    fileIn.skip(pos);
 类似资料:
  • 我们有一个EBCDIC文件,它是VB(可变长度)记录。与此EBCDIC相对应,我们有复制本,其中记录用01类型分隔&单个记录也包含打包的十进制字段。请建议我们如何将这种EBCDIC文件转换为ASCII。

  • 我有一个需求,我需要将包含可变长度记录的文件转换为固定长度记录。这是一个来自大型机的文件。 因为我不能访问大型机上的文件,所以我需要一个示例可变长度记录文件和一种转换为固定长度记录的方法。 我对这种文件是完全陌生的。但是如果我知道如何将这些可变长度的记录映射到固定长度的记录,我可以用Java编码。 这就是我的字段的位置: 所以我期待这样的输出:

  • 我在一个名为string1到String7的程序中有七个字符串。 每个字符串的大小为30个字符。

  • 我有一个逗号分隔的CSV文件(),其中逗号通过在引号中环绕数据来转义()。 我想通过使用记事本查找任何未包含在双引号()中的逗号,并将其替换为管道,将我的CSV转换为管道分隔文件()。 我的第一种方法是使用正则表达式匹配任何不带引号的逗号。但是,在记事本中搜索会同时替换未加引号的逗号和任何包含逗号的带引号的字符串。 如何使用记事本将逗号分隔的CSV文件()转换为管道分隔的文件()?

  • 问题内容: 假设我得到一个介于1到127之间的随机数。我将该数字更改为二进制,并使用下面的代码将其从中删除: 现在,我想通过在必要时以零填充开头来使其长度为7个字符。我认为我需要使用一个for循环,但是有人可以告诉我该怎么做吗? 问题答案: 不,你不会。

  • 问题内容: 您可能会或可能不知道的ASCII分隔文本,其中有使用非键盘字符分离领域和线条的不错的优势。 写下来很简单: 而且,可以肯定的是,您可以正确地丢弃东西。但是,在阅读时,什么也没有做,并且如果我尝试这样做: 它抛出 那么,如何读取ASCII分隔文件?我会降级吗? 问题答案: 您可以通过有效地将文件中的行尾字符转换为换行字符进行硬编码来识别: 输出: