ssis - 将 COMP-3 压缩十进制字段解释为数值

标签 ssis cobol comp-3

我正在创建一个 SSIS 包,以从一系列副本文件中读取解压数据。我不确定以下字段定义的正确解释,希望有人知道:

FIELD-NAME-1 PIC S9(15)V9(3) COMP-3。
FIELD-NAME-2 PIC S9(3)V9(8) COMP-3。
FIELD-NAME-3 PIC S9(3)V9(6) COMP-3。

数据存储在固定宽度的文本中。上述字段的数据具有以下长度:

FIELD-NAME-1:19
字段名称 2:11
FIELD-NAME-3:9

我不确定如何解释小数位和符号。

任何帮助将不胜感激。

亲切的问候,
火腿

最佳答案

这里有一些不同的尝试来回答你的问题。

PIC S9(15)V9(3) COMP-3 在文件中如下所示:

    00 00 00 00 00 00 00 00 00 0F

如果值为 -4568248.323,则为:
    00 00 00 00 04 56 82 48 32 3D

这对你没有帮助,但可能会帮助其他人。
解压之前的值看起来像:
F0 F0 F0 F0 F0 F0 F0 F0 F0 F4 F5 F6 F8 F2 F4 F8 F3 F2 D3 (or F3 as the last byte, therefore losing the sign)

该字段在小数点前有 15 位(实际上是 16 位)数字,在小数点后有 3 位数字。

尽管它只请求 18 位数字 (15+3),但它得到 19 位以使其成为带符号的偶数长度字段(在前面添加一位数字以使其在文件中的长度为 10 个字节)。最佳做法是始终使压缩字段的长度为奇数,以避免这种混淆。

**最后一个字母表示符号,C&F为正,D为负。对于您的程序,检查是否为负数 (D),如果不是,则视为正数。

** 'V' 是隐含的小数点。它在文件中不存在,但 COBOL 知道它在那里用于舍入等。您需要以编程方式对其进行说明。文件中没有任何内容可以帮助您识别它的位置或它是否存在。

另外两个字段已经是奇数长度,所以当打包时,使用符号,它们可以存储在偶数长度的空间中。

任何其他问题,编辑您的问题或在评论中提问,有人会尽力为您解答。

关于ssis - 将 COMP-3 压缩十进制字段解释为数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/795523/

相关文章:

ssis - 我可以在记事本中编辑 SSIS 包文件并使用它吗?

sql-server - 导出到 Excel 文件时,如何删除 SSIS 插入的列标题行?

c# - 读取 Cobol 生成的文件

format - COBOL COMP-3 数字格式问题

cobol - Signed Comp-3 Data COBOL 中的 DISPLAY 显示意外输出

sql-server - 年函数不支持 dt_wstr

sql-server - 如何使用 T-SQL 列出 Sql Server 2008 上的所有 SSIS 包

linux - 为什么我的某些输出文件中会写入随机空字符?

compiler-errors - “Not a uniquely defined name”什么时候只有一个定义?

java - Java 中的 COMP-3 数据解包(嵌入在 Pentaho 中)