如何在COBOL中处理JCL的SYSIN DD无格式数值变量对齐问题
COBOL读取SYSIN数据对齐问题解决方案
你遇到的问题是COBOL对数值型变量的默认输入规则导致的:当直接将SYSIN的输入内容读入PIC 9(10)类型变量时,输入的字符会左对齐填充,剩余右侧位置补零,所以输入"10"会被处理成1000000000。
无需修改输入数据的简便解决方法是先将输入内容读入字符型变量,再转存到数值型变量——COBOL在字符到数值的MOVE操作中会自动处理右对齐补零:
- 在WORKING-STORAGE节定义一个字符型临时变量:
WORKING-STORAGE SECTION. 01 WS-INPUT-CHAR PIC X(10). 01 WS-TARGET-NUM PIC 9(10).
- 读取SYSIN内容到字符变量,再转存到数值变量:
PROCEDURE DIVISION. ACCEPT WS-INPUT-CHAR FROM SYSIN. MOVE WS-INPUT-CHAR TO WS-TARGET-NUM.
这样处理后,输入的"10"会被右对齐到WS-TARGET-NUM中,自动在左侧补零,得到预期的0000000010。
如果是通过文件读取(而非ACCEPT),逻辑类似:先将记录读入字符型变量,再MOVE到数值变量即可。
内容的提问来源于stack exchange,提问作者Tomaszcygan
相关产品推荐
相关产品推荐

