COBOL-根据变量向字符串添加字符数

COBOL-根据变量向字符串添加字符数,cobol,Cobol,如何根据变量向字符串的开头添加字符?例如,我们用于电话号码的供应商将字符串转换为数字,从而删除电话号码的前导0。当他们向我们发回报告时,我们将数字转换回字符串,但现在它没有正确的数字数量。我正在尝试以下方法: IF LENGTH(TO-NUM) < 10 SUBTRACT LENGTH(TO-NUM) FROM 10 GIVING ADD-NUM-ZERO 如果长度(TO-NUM)10还是您的意思是10还是表示

如何根据变量向字符串的开头添加字符?例如,我们用于电话号码的供应商将字符串转换为数字,从而删除电话号码的前导0。当他们向我们发回报告时,我们将数字转换回字符串,但现在它没有正确的数字数量。我正在尝试以下方法:

IF LENGTH(TO-NUM) < 10
    SUBTRACT LENGTH(TO-NUM) FROM 10 GIVING ADD-NUM-ZERO
如果长度(TO-NUM)<10
从10中减去长度(TO-NUM),得到ADD-NUM-ZERO

现在我需要弄清楚如何将0的add-NUM-ZERO数字添加到字符串to-NUM的开头,而不覆盖已经在开头的字符。

假设
to-NUM
只包含后跟空格的数字(或空格后跟数字),然后

如有必要,将以前的内容替换为相同的值但前导零

IF TO-NUM NOT NUMERIC
语句相当于询问
TO-NUM
中的位数是否小于10

例如,如果
到num
之前是
'5551212'
,那么
到num
之后将是
'0005551212'


如果
to num
包含非数字,则有必要通过将
to num
解析为
temp-9
来提取数字,假设
to-num
仅包含后跟空格的数字(或空格后跟数字),然后

   Working-storage section.
   01 NUM    PIC 9(10) COMP-5.
   01 TELNUM-G.
     03 TELNUM PIC 9(10).
     03 TELNUM-S REDEFINES TELNUM.
       05 AREACODE   PIC 999.
       05 THREEDIGIT PIC 999.
       05 FOURDIGIT  PIC 9999.
   01 TELOUTPUT PIC X(13) VALUE '(AAA)TTT-NNNN'.

   Procedure division.
       Move 31234 to NUM.

       MOVE NUM TO TELNUM.
       INSPECT TELOUTPUT
         REPLACING ALL 'AAA' BY AREACODE
                   ALL 'TTT' BY THREEDIGIT
                   ALL 'NNNN' BY FOURDIGIT
如有必要,将以前的内容替换为相同的值但前导零

IF TO-NUM NOT NUMERIC
语句相当于询问
TO-NUM
中的位数是否小于10

例如,如果
到num
之前是
'5551212'
,那么
到num
之后将是
'0005551212'

如果
to num
包含非数字,则有必要通过将
to num
解析为
temp-9
来提取数字

   Working-storage section.
   01 NUM    PIC 9(10) COMP-5.
   01 TELNUM-G.
     03 TELNUM PIC 9(10).
     03 TELNUM-S REDEFINES TELNUM.
       05 AREACODE   PIC 999.
       05 THREEDIGIT PIC 999.
       05 FOURDIGIT  PIC 9999.
   01 TELOUTPUT PIC X(13) VALUE '(AAA)TTT-NNNN'.

   Procedure division.
       Move 31234 to NUM.

       MOVE NUM TO TELNUM.
       INSPECT TELOUTPUT
         REPLACING ALL 'AAA' BY AREACODE
                   ALL 'TTT' BY THREEDIGIT
                   ALL 'NNNN' BY FOURDIGIT
此代码假定数字为“NUM”,并且可以是任何ZONE/PACK/BINARY/COMP-3/COMP-5格式。我在这个示例代码中使用了COMP-5



此代码假定数字为“NUM”,并且可以是任何ZONE/PACK/BINARY/COMP-3/COMP-5格式。我在这个示例代码中使用了COMP-5。

您是打算
>10
还是您的意思是
<10
?TO-NUM的
数据描述条目是什么?是的,谢谢,我编辑了它。TO-NUM PIC X(16)。为破折号和括号提供了额外的字符。是否
函数长度(到num)
总是返回
16
?以及,
到num的代表性数据值是什么;它是一系列后跟空格的数字吗?
10
是除空格以外的所有字符的计数,还是仅表示数字
0到9
?您是打算
>10
还是表示
<10
?对于
TO-NUM
,数据描述条目是什么?是的,谢谢您,我编辑了它。TO-NUM PIC X(16)。为破折号和括号提供了额外的字符。是否
函数长度(到num)
总是返回
16
?以及,
到num的代表性数据值是什么;它是一系列后跟空格的数字吗?
10
是除空格以外的所有字符的计数,还是仅表示数字
0到9
?TO-NUM仅包含数字,因此使用numval函数将添加适当数量的前导零?@Rick:注释应该是“假设。。。仅包含后跟或后跟空格的数字“@jack-如果
TO-NUM
“仅包含数字”,则它将精确包含10个数字,并且
函数numval
不会更改该值。这意味着不需要检查位数。但是,验证
to-NUM
的内容被认为是“最佳实践”,因为它来自外部源。@jack
NUMVAL
函数创建一个中间数字项,去掉前导零,在第一个非数字处停止(中间项目可容纳的最大数字取决于您的供应商,但至少应为18),通过
将其移动到另一个数字项目(在本例中为
temp-9
),您可以去掉其前导零,该前导零大于项目可容纳的数字(在Rick的示例中:10)。使用字母数字组将为您提供一个项目,该项目将在右侧填充空格。当您需要多个尺寸时,请使用多个定义。@SimonSobisch-问题的上下文是数字后跟空格,但我将添加一条附加注释。TO-NUM只包含数字,因此使用numval函数将添加相应的NUM前导零的误码率?@Rick:注释应该是“假设……只包含后跟或后跟空格的数字”.@jack-如果
TO-NUM
仅包含数字,则它将精确包含10个数字,并且
函数numval
不会更改值。这意味着无需检查位数。但是,验证
TO-NUM
的内容被视为“最佳实践”,因为它来自外部源。@将
NUMVAL
函数移到另一个数字项上(在本例中为
temp-9
),将中间项移到第一个非数字处(中间项可容纳的最大数字取决于您的供应商,但至少应为18位),从而创建一个去除前导零的中间数字项你去掉了它的前导零,它们比物品所能容纳的要大(在Rick的样本中:10)。使用字母数字组将为您提供一个项目,该项目将在右侧填充空格。当您需要多个尺寸时,请使用多个定义。@SimonSobisch-问题的上下文是数字后跟空格,但我将添加一个附加注释。