我正在尝试通过java中的cobol描述符从txt文件解析数据。使用此方法时出现问题:
Record net.sf.cb2java.copybook.Copybook.parseData(byte[] arg0).
在cobol描述符中,有一行:
20 ACCD-LONG-SECONDS PIC 99V9999.
在这种情况下,相应的结果应为小数点左边的2位数字和小数点右边的4位数字。但是我得到的是小数点右边的6位数字。
例如,如果原始文件中的数据是123456,则我们期望的是12.3456,但是,我们得到的是0.123456
有人可以从这里帮助我吗?
最佳答案
我认为您的界面文件定义不正确。 “COBOL”文件应仅是文本数据。如果签名,则应为实际的+/-,如果带小数位,则应为实际的小数点。另外,对于小数位,可以使用“比例因子”,这对于浮点数据的文本表示是必需的。
您有一个“隐含”的小数点。似乎您使用的方法不能正确理解这一点。如果它提供的是.123456,则它根本无法正常工作。如果它对隐含的小数点位无效,则可能对其他定义也不起作用。
最安全的方法是切换方法。下一个最安全的方法是修复您使用的方法。下一个最安全的方法是,在收到结果后,自己进一步解析定义,以确定隐含的小数位的位置,然后做一些愚蠢的事情,例如乘以正确的10的幂。
请记住,使用最后两个,您可能仍然会遇到其他问题。如果cb2java处理文本数据但不能可靠地处理文本数据,为什么还要继续使用它呢?
cb2java的文档怎么说?也许那里有什么帮助吗?系统设计,数据设计和程序规范怎么说?
在COBOL中,将所有数据生成为“文本”并以“文本”接收所有数据并将其转换为COBOL系统所需的格式很简单。由于设计不良,您不得不做额外的工作。
如果您无法更改文件,建议使用JRecord。即使更改了文件,JRecord似乎仍然是更好的方法。
是的,您已经获得了完整的代码,但是当设计出错时,这些事情就会发生。至少将这些信息反馈到设计过程中,以免再次发生。
如果只是为了保存代码而修补补丁,那么您将遇到一些更难于理解和维护的东西,并且更容易出错。
一路上错过了概念验证,您就是那个遭受苦难的人。在不知道它起作用的情况下,不应启动文件代码。希望您没有多个文件。如果您正在执行的是POC,则切换到JRecord应该没有问题,所以我猜不是。
也许您对文档很幸运。除此之外,好处还在于改进了设计过程和您的经验,这意味着您将来不会犯类似的错误。