我正在创建一个 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/