【问题标题】:Converting unpacked Packed Decimal Comp-3 data into doubles将解压缩的 Packed Decimal Comp-3 数据转换为双精度
【发布时间】:2009-04-28 16:53:17
【问题描述】:

我有一个固定宽度的文本文件,它已从 Comp-3 数据中解压缩为固定宽度的字符串。

我需要知道如何解释以下字段:

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 0123456789123456780
FIELD-NAME-2 01234567890
FIELD-NAME-3 012345670

我需要知道上面的数字代表什么。

这是否正确:

FIELD-NAME-1 123456789123456.780  --> The first 0 means +ve?
FIELD-NAME-2 012.34567890
FIELD-NAME-3 012.345670

感谢您的帮助。 火腿

【问题讨论】:

    标签: comp-3


    【解决方案1】:

    S9(15)V9(3) 需要 19 个 nybbles(实际上是 20 个,因为它必须产生偶数个 nybbles)来存储:

    • 一个用于标志。
    • 15 表示整数位。
    • 3 表示非整数位(V 是隐含的小数,不是实数)。

    该标志通常以CD nybble 的形式出现在末尾,因此这个问题的答案完全取决于拆包的内容。

    你的第一个例子实际上有正确的数字没有符号所以我会担心你的说法,其中一个代表了符号。要么,要么你已经离开了“9”。其他两个示例的符号和数字部分都有足够的数字。

    最好的选择,看看你能不能得到一个负数(和其他测试数据,比如 1),看看它会产生什么。

    【讨论】:

    • 嗨,Pax,感谢您的帮助。作为另一个问题,您回答的案例是有道理的,因为该字段有 19 个字符。但是,对于字段名称 2 和 3,分别只有 11 和 9 个字符。这是否意味着该标志没有字符?再次感谢,火腿。
    • 不知道,对不起,火腿。正如我所说,这取决于拆包的内容。我之前写过代码来处理原始形式的 comp-3,这就是我熟悉这种格式的原因。如果您甚至可以找到不是以 0 开头或结尾的 一个 值,那么您就很有可能知道它是如何工作的。文件是从哪里来的?也许来源可以帮助您了解格式。
    • 你能发布几行实际的平面文件吗?确保保留空格,包括行首和行尾的任何空格。
    • 你好。很抱歉很密集,但我不明白例如 3,它包含足够的信息:FIELD-NAME-3 012345670 这是:123.45670 还是 012.345670?或者是其他东西?再次感谢。
    • 好的,谢谢帕克斯。你说得对,我需要从文件提供者那里获得更多信息,然后才能确定。我将查看原始文件,看看是否可以找到非 0。感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2010-09-13
    • 2015-09-13
    相关资源
    最近更新 更多