如何在COBOL中删除尾随空格

时间:2018-12-14 14:58:49

标签: cobol

我有以下代码:

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:

非常感谢您的帮助。谢谢!

5 个答案:

答案 0 :(得分:1)

添加另一个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:

答案 1 :(得分:1)

最简单的方法是从字段末尾倒数到第一个非空格字符。

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) ":".

答案 2 :(得分:0)

如果您愿意采用其他方法,则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:

答案 3 :(得分:0)

不确定这不适用于所有编译器,但我使用以下结构删除尾随空格和/或计算字符串长度。想法是反转正在使用的字符串,然后确定前导空格的数量。从字符串的长度中减去该数字。 如果存在的话,这还将保留所有嵌入的空间。

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.

答案 4 :(得分:0)

对于安装了APAR PI99703的Enterprise COBOL V6R2。您可以使用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!!!<<