COBOL:如何在修剪输入前后的所有空格后计算所有字符

COBOL: How to count all characters after trimming all the spaces before and after Input

STRING FUNCTION TRIMR(EINA01 OF FORMAT1)     
       DELIMITED BY SIZE                     
   INTO WORTTXT1                             
END-STRING.                                  
MOVE FUNCTION REVERSE (WORTTXT1) TO WORTTXT2.
STRING FUNCTION TRIMR(WORTTXT2)              
       DELIMITED BY SIZE                     
   INTO WORTTXT3                             
END-STRING.                                  
INSPECT WORTTXT3 TALLYING LOO FOR CHARACTERS 
                 BEFORE INITIAL SPACES.      


   MOVE EINN01 OF FORMAT1 TO X.              
   MOVE EINN02 OF FORMAT1 TO Y.              
   MOVE EINA01 OF FORMAT1 (X:Y)              
     TO AUSA01 OF FORMAT1.                   

我们的问题是,如果我们超过变量 EINA01 的长度,即 50,程序就会崩溃。

我们的想法是 trim 从左到右的所有 space 并计算给定输入的所有字符。

我们面临的问题是我们无法计算所有字符,因为我们通常会用 "Inspect count all characters before initial spaces" 来计算。 但是,例如,如果我们有一个像 "Hello World" 这样的输入,他只会计算所有内容,直到 "Hello" 之后的第一个 space。

如果你想获得字符串的长度,有几种不同的方法可以做到这一点:

方法一

一个简单的循环:

WS-INPUT-STRING  PIC  X(100) VALUE "12345678901234567890".
WS-OUTPUT-STRING PIC X(50).
WS-POS           PIC X(4) COMP.

PERFORM VARYING WS-POS
           FROM 100 BY -1
           UNTIL WS-INPUT-STRING(WS-POS:1)
                 NOT EQUAL SPACE OR
                 WS-POS < 1
END-PERFORM
IF WS-POS <= 50
   MOVE WS-INPUT-STRING(1:WS-POS) TO WS-OUTPUT-STRING
END-IF

方法二

检查理货

WS-INPUT-STRING  PIC X(100) VALUE "12345678901234567890".
WS-OUTPUT-STRING PIC X(50).
WS-BLANK-COUNT   PIC 9(4) COMP.
WS-IN-MAX        PIC 9(4) COMP VALUE 100.

INSPECT FUNCTION REVERSE (WS-INPUT-STRING)
        TALLYING WS-BLANK-COUNT FOR LEADING SPACES
IF (WS-IN-MAX - WS-BLANK-COUNT) <= 50
   MOVE WS-INPUT-STRING(1:WS-IN-MAX - WS-BLANK-COUNT)
END-IF

这两个都是可行的选择。我更喜欢我自己的循环。

通常还要记住,前导空格很重要,除非您 100% 确定不需要它们,否则我不建议修剪它们。