接受cics地图中的字符的数字字段

Pra*_*mod 0 db2 cobol cics

我的地图中有4个字段,分别是9(6),9(3),9(3),9(3).我写了这样的验证码:

IF ROLLNUM IS NOT NUMERIC                          
MOVE DFHRED TO ROLLNUMC                         
MOVE 'INVALID DATA' TO RESMSGO                  
MOVE ROLLNUMI TO ROLLNUMO                       
PERFORM SEND-MAP THRU SEND-MAP-EXIT             
PERFORM KEY-VALIDATION THRU KEY-VALIDATION-EXIT.
Run Code Online (Sandbox Code Playgroud)

但是,从Cics中将A12AK等值插入数据库时​​,我没有遇到任何错误.它将A替换为1,B替换为2,依此类推......为什么会发生这种情况?以及如何避免这种情况

Nea*_*alB 5

Gilbert正在为您提供有关修复CICS地图的建议.接受!

让我试着解释"奇怪"的价值......

当字符(PIC X)放在PIC 9数据项中时,表示字符值的字节的高4位被'F'x覆盖.低4位保持原样.

此时,查看EBCDIC角色图可能很有用

请注意,'A'的十六进制表示为'C1'x,1为'F1'x.当'A'移动到一个 PIC 9字段时,它变为1(高4位,'C'x,用'F'x替换,低4位保持原样).所有字母表中的相似类型的东西.请注意,'A'到'Z'的EBCDIC字符序列不是连续的(当低4位滚入'A'x - 'F'x范围时,存在间隙).这就是为什么在将字母从"X"类型移动到"9"类型字段时始终会获得"有效"数字的原因.

当仅涉及数字,字母和空格时,从"X"到"9"类型数据项移动后,结果是有效的数值.然后这将通过IF NUMERIC测试.

问题的根源在于,当该值传输到PIC 9如上所述转换时定义的工作存储项时,CICS映射允许非数字数据输入.不是你想要的!正如Gilbert指出的那样,如果将CICS地图字段定义为"NUM",则用户可以输入的唯一有效字符是数字,这可以解决您的问题.

最后,请注意一些非字母字符,例如"@"将不会隐藏到有效数字中.