COBOL - добавить количество символов в строку на основе переменной - PullRequest
0 голосов
/ 06 июня 2018

Как бы я добавил символы в начало строки на основе переменной?Например, поставщик, которого мы используем для телефонных номеров, преобразует строку в число, которое сбрасывает первые 0 из номера телефона.Когда они отправляют нам отчет обратно, мы конвертируем число обратно в строку, но теперь оно не имеет правильного количества чисел.Я пытаюсь сделать следующее:

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

Теперь мне нужно выяснить, как добавить ADD-NUM-ZERO число 0 в начало строки TO-NUM, не перезаписывая символы уже в начале.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018
   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 в этом примере кода.

0 голосов
/ 06 июня 2018

Если предположить, что 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.

...