如何在 COBOL 中从 JCL 处理来自 SYSIN DD 的非格式化数值变量

问题描述 投票:0回答:2

我编写了一个非常简单的 COBOL 程序,该程序应该从 sysin dd * 获取数据并将其放入我的 WORKING-STORAGE 变量中,但它没有按预期工作。

问题是当我尝试将值 10 传递给 pic 9(10) 变量时, 在 jcl 中这样编码:

//SYSIN    DD  *
10
/*

我得到 1000000000 而不是 0000000010。有没有一种简单的方法可以使其在不更改输入数据的情况下工作?

提前致谢:)

cobol jcl
2个回答
2
投票

简单的方法是执行

MOVE FUNCTION NUMVAL (ALPHANUMERIC-SYSIN) TO NUMERIC-VAR
,可能随后检查结果是否不为零(无效数据和空数据以及实际的零都会出现这种情况。
根据编译器的版本(问题中缺少该信息),您可以使用
FUNCTION TEST-NUMVAL (ALPHANUMERIC-SYSIN)
进行单独的验证 - 或者完全自己完成。


0
投票

假设数字始终是左调整且后跟空格,则可以先右调整,然后再将其移动到数字字段。

类似的东西

perform until jclinput(10:1) is not space
  perform varying ind1 from 9 to 1 by -1
     ind 2 = ind1 + 1
     move jclinput(ind1:1) to jclinput(inp2:2)
     move zero to jclinput(1:1)
  end-perform
end-perform

也许不是您在问“有没有简单的方法”时想到的。

© www.soinside.com 2019 - 2024. All rights reserved.