2017-09-19 29 views
1

我目前正在尝试创建一个程序,其中游标读取“描述”DB2表的var char字段和读取“前缀”var的游标来自另一个表的char字段。然后,我需要检查每个描述,看看描述开始时是否存在任何前缀,如果有,则用一个空格替换它。尝试扫描多个前缀的文本字段以将其删除

这些暂存值:

03 WS-PFIX. 
    49 WS-PFIX-LEN PIC S9(4) COMP. 
    49 WS-PFIX-TEXT 

03 WS-DESC. 
     49 WS-DESC-LEN PIC S9(4) COMP. 
     49 WS-DESC-TEXT PIC X(100). 

我试过下面的代码:

INSPECT WS-DESC-TEXT(1:WS-PFIX-LEN) 
REPLACING WS-PFIX-TEXT TO " " 

这不起作用,因为WS-PFIX-TEXT固定为100个字符所以没有匹配,因为它包含比较中的所有尾部空格。我也试过这个:

INSPECT WS-DESC-TEXT(1:WS-PFIX-LEN) 
REPLACING WS-PFIX-TEXT(1:WS-PFIX-LEN) TO " " 

但编译器不喜欢在REPLACING行中使用子字符串。

有没有人知道任何替代品,可以用于这将工作?我在互联网上搜索了很多年,似乎找不到任何东西。

谢谢

回答

1

还有另一个问题,即使子字符串工作。您正在检查的文本与您要替换的文本匹配(长度)很长。

话虽这么说,你总是可以做到这一点逻辑:

03 WS-PFIX. 
    49 WS-PFIX-LEN PIC S9(4) COMP. 
    49 WS-PFIX-TEXT PIC X(100). 

03 WS-DESC. 
    49 WS-DESC-LEN PIC S9(4) COMP. 
    49 WS-DESC-TEXT PIC X(100). 

03 WS-TEMP. 
    49 WS-TEMP-LEN PIC S9(4) COMP. 
    49 WS-TEMP-TEXT PIC X(100). 

MOVE 0  TO WS-TEMP-LEN 
MOVE SPACES TO WS-TEMP-TEXT 

IF WS-DESC-TEXT(1:WS-PFIX-LEN) = WS-PFIX-TEXT(1:WS-PFIX-LEN) 
    ADD 1 TO WS-TEMP-LEN 
    MOVE SPACE TO WS-TEMP-TEXT(1:1) 
    ADD 1 TO WS-TEMP-LEN 
    MOVE WS-DESC-TEXT(WS-PFIX-LEN + 1:) TO WS-TEMP-TEXT(2:) 

    COMPUTE 
     WS-TEMP-LEN = (WS-DESC-LEN - WS-PFIX-LEN) + 1 
    END-COMPUTE 
ELSE 
    MOVE WS-DESC-TEXT TO WS-TEMP-TEXT 
    MOVE WS-DESC-LEN TO WS-TEMP-LEN 
END-IF 

MOVE SPACES  TO WS-DESC-TEXT 
MOVE 0   TO WS-DESC-LEN 

MOVE WS-TEMP-TEXT TO WS-DESC-TEXT 
MOVE WS-TEMP-LEN TO WS-DESC-LEN 

我注意到的另一件事是,即使你的检查声明没有工作时,WS-DESC-LEN会因为你有一个替代多个字符是错误的空间。

这应该做你想做的。我无法测试它,所以我的数量可能会稍微偏离。这基本上是你想要做的。

+0

干杯的答案,最后只是在逻辑上做,如果它与前缀匹配,它只是用空格替换描述的开始。实际上,我调整了一个程序,它的功能类似于我想要的功能,它包含一个单独的部分,用于删除多次出现的空格并更新其长度。 非常感谢您的帮助! – mmackenzie93

相关问题