我想从COBOL的字符串中删除某些字符。 例如,“ ****这是*测试**字符串”。将变为“这是一个测试字符串”。“第二”将变为“第二个”。
答案 0 :(得分:1)
尝试以下代码段。
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-STR PIC X(20) VALUE '****This is*a test**'.
01 WS-CNT PIC 99 VALUE 0.
01 WS-I PIC 99 VALUE 0.
01 WS-J PIC 99 VALUE 1.
01 WS-CHAR.
05 WS-LETTER OCCURS 1 TO 20 TIMES DEPENDING ON WS-CNT PIC X.
PROCEDURE DIVISION.
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > FUNCTION LENGTH(WS-STR)
IF WS-STR(WS-I:1) = '*' THEN
CONTINUE
ELSE
MOVE WS-STR(WS-I:1) TO WS-LETTER(WS-J)
ADD 1 TO WS-J
ADD 1 TO WS-CNT
END-IF
END-PERFORM
DISPLAY WS-CHAR
STOP RUN.
输出:
This isa test
注意:我使用了Tutorial Point的COBOL编码基础来运行上面的代码片段。不需要在此处缩排COBOL代码。
答案 1 :(得分:1)
虽然INSPECT ... REPLACING
无法更改数据项中字符的位置,但是INSPECT ... CONVERTING
可用于为后续操作准备数据项。
以下,过程strip-string
首先将所有要替换的字符转换为单个公共字符,在这种情况下为LOW-VALUES
。这会分割字符串,以便可以使用公共字符轻松地分隔片段。 PERFORM
在片段字符串上循环。 UNSTRING
语句将一个片段移动到输出,并提供COUNT
个已移动字符的数量。 ADD
扩大了输出的起始位置,以使片段按顺序放置。
代码:
data division.
working-storage section.
1 binary.
2 p pic 9(4).
2 o pic 9(4).
2 o-count pic 9(4).
1 i-string pic x(40).
88 test-1 value '****This is*a test** string.'.
88 test-2 value '"Second one"'.
1 o-string pic x(40).
1 r-chars pic x(2) value '*"'. *> characters to be removed
procedure division.
begin.
set test-1 to true
perform test-prep
set test-2 to true
perform test-prep
stop run
.
test-prep.
display i-string
perform strip-string
display o-string
display space
.
strip-string.
inspect i-string converting r-chars to low-values
move 1 to p o
perform until p > function length (i-string)
unstring i-string
delimited all low-values
into o-string (o:)
count in o-count
with pointer p
add o-count to o
end-perform
.
输出:
****This is*a test** string.
This isa test string.
"Second one"
Second one