COBOL:如何在修改Input之前和之后的所有空格后计算所有字符

问题描述 投票:0回答:1
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,则程序崩溃。

我们的想法是从左和右修剪所有空格并计算给定输入的所有字符。

我们面临的问题是我们无法统计所有字符,因为我们通常会使用“Inspect count the initial spaces in initial spaces”。但是,如果我们举例如“Hello World”这样的输入,他只计算“Hello”之后的第一个空格。

string reverse trim cobol inspect
1个回答
3
投票

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

方法1

一个简单的循环:

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

方法2

检查理货

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%确定它们不是必需的。

© www.soinside.com 2019 - 2024. All rights reserved.