尝试扫描多个前缀的文本字段以将其删除
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 替换了多个字符。
这应该可以满足您的要求。我没有办法测试它,所以我的计数可能略有偏差。不过,这基本上就是您想要做的。
我目前正在尝试创建一个程序,其中一个游标读取 "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 替换了多个字符。
这应该可以满足您的要求。我没有办法测试它,所以我的计数可能略有偏差。不过,这基本上就是您想要做的。