COBOL中如何在整数前存储Nº固定前缀实现类似Nº423的格式
COBOL 实现整数前带固定前缀
Nº存储的方案 原有写法的问题
77 SC PIC 'Nº'9 VALUE 423.:标准ANSI COBOL不支持PIC子句内用单引号包裹固定字符串做插入内容,仅极个别老旧方言兼容该写法;同时该定义仅留了1位数字长度,和3位数字423的存储需求不匹配,会触发编译或运行报错。77 SC PIC N9 VALUE 423.:PIC里的N是国家字符集(Unicode)类型标记,代表单个Unicode字符位,不是你要的前缀Nº;且该定义仅留1位数字位,根本存不下3位数字。
正确写法
根据是否需要单独操作后缀数字,选对应方案即可:
方案1:仅需存储、展示固定格式内容,不需要单独计算数字
直接定义匹配总长度的字母数字字段:Nº占2个字符,加3位整数总长度为5,写法:
77 SC PIC X(5) VALUE "Nº423".
如果你的编译器支持数值编辑型PIC直接插入固定字符,也可以写成编辑型字段,后续直接给字段赋数值就会自动带前缀:
77 SC PIC Nº999 VALUE 423.
*注意:如果是用老旧EBCDIC字符集的环境,不支持º特殊符号的话,替换成环境兼容的同含义字符(比如小写o)即可。
方案2:需要对后缀数字做数值计算、修改
用组项拆分前缀和数值部分,COBOL组项是连续内存存储,直接引用组项名就能拿到完整的Nº+数字内容,同时支持单独操作数值部分:
01 SC-GROUP. 05 SC-PREFIX PIC X(2) VALUE "Nº". 05 SC-NUM PIC 9(3) VALUE 423.
这种写法下,引用SC-GROUP就能得到Nº423的效果;需要改数字时直接操作SC-NUM就行,比如执行ADD 1 TO SC-NUM后,组项内容会自动变成Nº424,不需要额外拼接字符串。
内容的提问来源于stack exchange,提问作者Jose A. Matarán
相关产品推荐
相关产品推荐

