为什么这个 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) ) "-"
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) ) "-"