尝试扫描多个前缀的文本字段以将其删除

Trying to scan a text field for multiple prefix's to remove them

我目前正在尝试创建一个程序,其中一个游标读取 "description" DB2 table 的 var char 字段,一个游标读取 "prefix" var char 字段来自另一个 table。然后我需要检查每个描述以查看描述的开头是否存在任何前缀,如果存在,则将其替换为单个 space.

这些的工作存储值是:

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 个字符,因此没有匹配项,因为它在比较中包含所有尾随 space。我也试过这个:

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

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

有谁知道可以使用的任何替代方法?我已经在互联网上搜索了很久,但似乎找不到任何东西。

谢谢

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

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

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 也是错误的,因为您用单个 space 替换了多个字符。

这应该可以满足您的要求。我没有办法测试它,所以我的计数可能略有偏差。不过,这基本上就是您想要做的。