有帮助吗?

解决方案

稀释,BCD。鸣喇叭,如果你在6502组件中使用它。

当然,最好的办法是让COBOL MOVE为你做的工作!这些可能性之一可能有所帮助。

(可能性#1)假设你有访问的主机和源代码,并输出文件只用于你的使用,修改程序以便它只是移动值到纯解压PIC S9(7)V99 。

(可能性#2)假设它不是那么容易的,(例如,文件被输入对其他铂族金属,或不能改变的代码),可以写,读取该文件,并写入另一系统上的另一COBOL程序。切,并与BCD文件记录布局粘贴到输入和输出文件的新方案。修改输出版本为非包装。阅读记录,做来传输数据,并写入,直到EOF一个“相应的举动”。然后转移文件。

(可能性#3)如果你不能碰的主机,注意,您在您的评论链接的文章中的描述。 BCD是比较简单的。它的可能那么容易,因为这(vb.net):

Private Function FromBCD(ByVal BCD As String, ByVal intsz As Integer, ByVal decsz As Integer) As Decimal
    Dim PicLen As Integer = intsz + decsz
    Dim result As Decimal = 0
    Dim val As Integer = Asc(Mid(BCD, 1, 1))
    Do While PicLen > 0
        result *= 10D
        result += val \ 16
        PicLen -= 1
        If PicLen > 0 Then
            result *= 10D
            result += val Mod 16
            PicLen -= 1
            BCD = Mid(BCD, 2)
        End If
        val = Asc(Mid(BCD, 1, 1))
    Loop
    If val Mod 16 = &HD& Then
        result = -result
    End If
    Return result / CDec(10 ^ decsz)
End Function

我与该呼叫的一些变化测试它:

MsgBox(FromBCD("@" & Chr(13 + 16), 2, 1))

如,是-40.1。但只有少数。因此,它仍然可能是错误的。

所以,这时如果你的COMP-3开始,也就是说,在输入记录布局的10字节,这将解决这个问题:

dim valu as Decimal = FromBCD(Mid(InputLine,10,5), 7,2))

这之前和V之后的#字节来发送在数据转换制品,和9点的所述#注意到公式。

在一个十进制将结果存储,以避免舍入误差。 ESP,如果它是$$$。浮球double将使您解忧!如果你不处理它,甚至一个字符串是更好的。

当然它的更难。我在哪里工作,大型机是每字节9位。严重。这是什么使得第2点的可能性,从而显着。当然,真正使他们更好地为这一事实,你可以是PC仅编程,这是一个伟大的借口来获得的大型机程序员做的工作为您服务!如果你是如此幸运,有选择...

和平 -Al

scroll top