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

COBOL- Add number of characters to a string based on variable

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

IF LENGTH(TO-NUM) < 10
    SUBTRACT LENGTH(TO-NUM) FROM 10 GIVING ADD-NUM-ZERO

现在我需要弄清楚如何将 ADD-NUM-ZERO 个 0 添加到字符串 TO-NUM 的开头而不覆盖开头的字符。

假设TO-NUM仅包含数字后跟空格(或空格后跟数字),则

1 TO-NUM PIC X(10).
1 temp-x.
 5 temp-9 pic 9(10).

if to-num not numeric
    compute temp-9 = function numval (to-num)
    move temp-x to to-num
end-if

如有必要,将用相同的值替换之前的内容,但前导零。

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

例如,如果 to-num 之前是 '5551212 ',那么 to-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。