在ruby中转换有符号cobol数

在ruby中转换有符号cobol数,ruby,cobol,Ruby,Cobol,我有一个ascii文件,它是来自基于cobol的系统的数据转储 文档中有一个字段称为pics9(3)V9(7)。 下面是两个十六进制(和ascii)字段示例,以及它们所表示的结果数字(取自另一个源) 我使用的是ruby,即使在添加了隐含的十进制数之后,我似乎得到的数字也不正确。我正在尝试解析,但我非常感谢您的帮助 给定一个隐含的十进制Cobol字段“PIC S9(3)V9(7)”,如何使用ruby将其转换为有符号浮点?假设数据字节已通过哑EBCDIC到ASCII转换器运行,这两个值分别为+28.

我有一个ascii文件,它是来自基于cobol的系统的数据转储

文档中有一个字段称为
pics9(3)V9(7)。

下面是两个十六进制(和ascii)字段示例,以及它们所表示的结果数字(取自另一个源)

我使用的是ruby,即使在添加了隐含的十进制数之后,我似乎得到的数字也不正确。我正在尝试解析,但我非常感谢您的帮助


给定一个隐含的十进制Cobol字段“PIC S9(3)V9(7)”,如何使用ruby将其转换为有符号浮点?

假设数据字节已通过哑EBCDIC到ASCII转换器运行,这两个值分别为+28.6858456和+98.4561383。这意味着生成“reported value”列的内容要么被破坏,要么使用不同的字节作为其源


看起来报告的值可能经过了低精度浮点转换,但这仍然不能解释第二个值上的错误符号。

正如Mark Reed所说,我认为数字是+28.6858456和+98.4561383

但您可以参考这篇神奇的文档,了解ascii和EBCDIC之间的签名数字:

希望对你有帮助

028685845F
098456138C
ASCII中的2个字符串很可能是从EBCDIC转换而来的

这些是区域编号,末尾有一个符号半字节转换为一个字节。正如其他人所说的,F和C是符号符号

查看此网页

  • F代表“未签名”
  • C代表“正负符号”
图片S9(3)V9(7)告诉你它是ddd.ddddddd(小数点前3位,小数点后7位,整个东西都有符号。)

2“字符串”可能是不同的PIC,您需要检查生成这些数字的COBOL源代码


最好获取COBOL数据的原始十六进制转储(可能在EBCDIC中),然后发布这些数据。(但是,我也意识到这是一篇有7.5年历史的文章,专栏可能已经开始了。)我上面写的是为将来遇到这篇文章的人准备的。

你得到了什么数字?从您链接到的文档中,我觉得它们应该是28.6858456和98.4561383(都是正数),它们与报告的值匹配到小数点后2位和1位(尽管第二位有符号翻转)。格式建议值应该有7位小数,但报告的值只有6位。是的,从那些文档中我得到了相同的结果。然而,我确信第二个值应该是负值,因为它们是坐标。我试过很多其他的例子,虽然我得到了小数点后几位,但我的转换并不完全正确。第二个数字是正数。C、A、F或E的符号为正,其他符号为负。也许你的转换是正确的,而你的数据是错误的。如果你得到matt根据十六进制输入给你的值,那么你的转换是正确的。您的输入是否可能在进行转换之前就已经被损坏了?您可以查看RecordEditor(),您可以导入cobol Copybook(使用binary_type=Mainframe)并使用它使用cobol Copybook显示文件
028685845F
098456138C