为什么这个 trim 文本结尾不起作用?

why is this trim text trailing not working?

       IDENTIFICATION DIVISION.
       PROGRAM-ID. KATA.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-INPUT      PIC A(200).
       01 WS-OUT        PIC A(200).
       01 I             PIC 9(08).
       01 J             PIC 9(08).
       01 INP-LEN       PIC 9(08).
       PROCEDURE DIVISION.
       DISPLAY "INPUT YOUR STRING"
       ACCEPT WS-INPUT
       DISPLAY "REVERSING ......."
       MOVE FUNCTION LENGTH(FUNCTION TRIM(WS-INPUT TRAILING)) TO INP-LEN
       DISPLAY "Just for reference : Your string is "INP-LEN " long"
       MOVE 1 to I.
       PERFORM VARYING J from INP-LEN by -1 UNTIL J =0
       MOVE WS-INPUT(I:1) to WS-OUT(J:1)
       MOVE FUNCTION TRIM(WS-OUT TRAILING) TO WS-OUT
       ADD 1 to I
       END-PERFORM
       MOVE FUNCTION TRIM(WS-OUT TRAILING) TO WS-OUT.
       DISPLAY WS-OUT
       DISPLAY FUNCTION LENGTH(WS-OUT)
       STOP RUN.

运行输入程序ctrl test

如果你运行程序你会看到WS-INPUT的长度是:

Just for reference : Your string is 00000009 long

但是如果你这样做输出它会说字符串的长度是 200 我得到的反转字符串也是:

tset lrtc                                                                                                                                                                                               

这是 200 而不是我设置的。

谁能解释我哪里出错了,我该如何解决?

(注意:我最初尝试使用函数 REVERSE 所以一个简单的

       MOVE FUNCTION REVERSE(WS-INPUT) TO WS-OUTPUT

也有同样的问题 )

FUNCTION LENGTH (source) 从源中获取长度,在您的情况下是 WS-OUT,即 PIC A(200) - 所以答案 200 是正确的。

FUNCTION TRIM (source TRAILING) 为每个函数创建一个 temporary/internal 项 - 在这种情况下,从 source.

中删除尾随 SPACES

由于您的 MOVE 这个长度为 9 的临时项目到一个长度为 200 的字段,它会被空格右填充。 只有 DYNAMIC LENGTH 项的动态尺寸为 MOVE,所有其他项始终保持其尺寸不变。 [为简单起见,将“ODO”排除在外...]

您可能需要嵌套函数调用:TRIM + REVERSE / LENGTH:

DISPLAY FUNCTION LENGTH ( FUNCTION TRIM (WS-OUT) )
DISPLAY "-" FUNCTION REVERSE ( FUNCTION TRIM (WS-IN TRAILING) ) "-"