Как убрать завершающие пробелы в COBOL - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть следующий код:

01 W-IX1                          PIC 9(8) VALUE ZERO COMP-4.

01 W-INPUT-AMNT                   PIC 9(9)V9(5).
01 W-ROUNDED-AMNT                 PIC Z(9).
01 W-TEMP-AMNT                    PIC X(9).
01 W-OUTPUT-AMNT                  PIC X(9).

MOVE 123.92345 TO W-INPUT-AMNT.
MOVE 1 TO W-IX1.

COMPUTE W-ROUNDED-AMNT ROUNDED = W-INPUT-AMNT * 1.
MOVE W-ROUNDED-AMNT TO W-TEMP-AMNT.

INSPECT W-TEMP-AMNT TALLYING W-IX1 FOR LEADING SPACES.
MOVE W-TEMP-AMNT(W-IX1:) TO W-OUTPUT-AMNT.

DISPLAY "RESULT:" W-OUTPUT-AMNT ":".

MOVE SPACE TO W-OUTPUT-AMNT.

И следующий вывод:

RESULT:124      :

Я хочу получить следующий вывод:

RESULT:124:

Буду признателен за любойПомогите.Thx!

Ответы [ 5 ]

0 голосов
/ 18 декабря 2018

С Enterprise COBOL V6R2 с установленным APAR PI99703.Вы можете использовать встроенную функцию TRIM.

   Identification division.
   Program-id. TESTTRIM.
   Data division.
   Working-storage section.
   1 msg pic x(20) value "Hello, World!!!   ".
   Procedure division.
       Display ">>" msg "<<"
       Display ">>" function trim(msg) "<<"
       Goback.

Вывод будет:

>>Hello, World!!!     <<
>>Hello, World!!!<<
0 голосов
/ 17 декабря 2018

Не уверен, что это будет работать не на всех компиляторах, но я использую следующую конструкцию для удаления конечных пробелов и / или вычисления длины строк.Идея состоит в том, чтобы перевернуть строку, с которой вы работаете, а затем определить количество начальных пробелов.Вычтите это число из длины строки.Это также сохранит все встроенные пробелы, если они есть.

WORKING-STORAGE SECTION.
01 W-IX1                          PIC 9(8) VALUE ZERO COMP-4.
01 W-TRAIL                        PIC 9(8) VALUE ZERO COMP-4.
01 W-LENGTH                       PIC 9(8) VALUE ZERO COMP-4.

01 W-INPUT-AMNT                   PIC 9(9)V9(5).
01 W-ROUNDED-AMNT                 PIC Z(9).
01 W-TEMP-AMNT                    PIC X(9).
01 W-OUTPUT-AMNT                  PIC X(9).

PROCEDURE DIVISION.
    MOVE 123.92345 TO W-INPUT-AMNT.
    MOVE 1 TO W-IX1.

    COMPUTE W-ROUNDED-AMNT ROUNDED = W-INPUT-AMNT * 1.
    MOVE W-ROUNDED-AMNT TO W-TEMP-AMNT.

    INSPECT W-TEMP-AMNT TALLYING W-IX1 FOR LEADING SPACES.
    MOVE W-TEMP-AMNT(W-IX1:) TO W-OUTPUT-AMNT.

    MOVE ZERO TO W-TRAIL.

    INSPECT FUNCTION REVERSE (W-OUTPUT-AMNT)
        TALLYING W-TRAIL
        FOR LEADING SPACE.

    SUBTRACT W-TRAIL 
        FROM LENGTH OF W-OUTPUT-AMNT
        GIVING W-LENGTH.

    DISPLAY "RESULT:" W-OUTPUT-AMNT(1:W-LENGTH) ":".

    MOVE SPACE TO W-OUTPUT-AMNT.

    STOP RUN.
0 голосов
/ 16 декабря 2018

Простой способ сделать это - подсчитать в обратном направлении от конца поля до первого непробельного символа.

Preform varying NDX from length of W-OUTPUT-AMT by -1
  until W-OUTPUT-AMT (NDX:1) <> SPACE

DISPLAY "RESULT:" W-OUTPUT-AMNT (1:NDX) ":".
0 голосов
/ 16 декабря 2018

Если вы открыты для другого подхода, оператор UNSTRING может исключить начальные пробелы, сделать конечные пробелы неуместными и удобно сохранить число и его длину.

Обратите внимание, что W-ROUNDED-AMNT изменено наобеспечить один начальный пробел и хотя бы одну цифру.

   WORKING-STORAGE SECTION.
   01 W-IX1                          PIC 9(8) VALUE ZERO COMP-4.

   01 W-INPUT-AMNT                   PIC 9(9)V9(5).
   01 W-ROUNDED-AMNT-X.
     03 W-ROUNDED-AMNT               PIC Z(9)9.
   01 W-X                            PIC X.
   01 W-OUTPUT-AMNT                  PIC X(9).

   PROCEDURE DIVISION.
       MOVE 123.92345 TO W-INPUT-AMNT.

       COMPUTE W-ROUNDED-AMNT ROUNDED = W-INPUT-AMNT.

       UNSTRING W-ROUNDED-AMNT-X DELIMITED ALL SPACE
           INTO W-X W-OUTPUT-AMNT COUNT W-IX1

       DISPLAY "RESULT:" W-OUTPUT-AMNT(1:W-IX1) ":".
       MOVE SPACE TO W-OUTPUT-AMNT.

       STOP RUN.

Вывод:

RESULT:124:
0 голосов
/ 14 декабря 2018

Добавление еще одного INSPECT с некоторыми другими изменениями должно быть всем необходимым.

01 W-IX2                          PIC 9(8) VALUE ZERO COMP-4.

MOVE 0 TO W-IX2
INSPECT W-OUTPUT-AMNT TALLYING 
    W-IX2 FOR CHARACTERS BEFORE SPACE.

DISPLAY "RESULT:" W-OUTPUT-AMNT(1:W-IX2) ":".

Вывод:

RESULT:124:
...