我在执行此任务时遇到问题;我们的任务是连接两个字符串,两个字符串之间不要有空格,例如:
输入Alphanum。 。 1:此字符串为
输入Alphanum。 。 2:级联。
输入Alphanum。 。 3:
Alphanum。输出1:此字符串是串联的。
Alphanum。输出2:
我可以将这两个字符串放到输出中,但是它们之间不会留有空格,不会相互连接。
答案 0 :(得分:2)
因此,假设您不知道两个字符串的长度,则需要执行以下操作:
01 WS-INPUT-STRINGS.
05 WS-STRING1 PIC X(100) VALUE "THIS STRING IS".
05 WS-STRING2 PIC X(100) VALUE "CONCATENATED".
05 WS-STRING3 PIC X(100) VALUE SPACES.
01 WS-OUTPUT-STRINGS.
05 WS-CONCATENATED-OUTPUT PIC X(300) VALUE SPACES.
01 WS-COUNTERS.
05 WS-LEN-IN PIC 9(4) COMP VALUE 1.
05 WS-POS PIC 9(4) COMP VALUE 1.
IF WS-STRING1 NOT EQUAL SPACES OR LOW-VALUES
PERFORM VARYING WS-LEN-IN
FROM 100 BY -1
UNTIL WS-STRING1(WS-LEN-IN:1)
NOT EQUAL (SPACES OR LOW-VALUES) OR
WS-LEN-IN = 1
END-PERFORM
MOVE WS-STRING1(1:WS-LEN-IN)
TO WS-CONCATENATED-OUTPUT(WS-POS:WS-LEN-IN)
ADD WS-LEN-IN TO WS-POS
END-IF
IF WS-STRING2 NOT EQUAL SPACES OR LOW-VALUES
PERFORM VARYING WS-LEN-IN
FROM 100 BY -1
UNTIL WS-STRING2(WS-LEN-IN:1)
NOT EQUAL (SPACES OR LOW-VALUES) OR
WS-LEN-IN = 1
END-PERFORM
MOVE WS-STRING2(1:WS-LEN-IN)
TO WS-CONCATENATED-OUTPUT(WS-POS:WS-LEN-IN)
ADD WS-LEN-IN TO WS-POS
END-IF
IF WS-STRING3 NOT EQUAL SPACES OR LOW-VALUES
PERFORM VARYING WS-LEN-IN
FROM 100 BY -1
UNTIL WS-STRING3(WS-LEN-IN:1)
NOT EQUAL (SPACES OR LOW-VALUES) OR
WS-LEN-IN = 1
END-PERFORM
MOVE WS-STRING3(1:WS-LEN-IN)
TO WS-CONCATENATED-OUTPUT(WS-POS:WS-LEN-IN)
ADD WS-LEN-IN TO WS-POS
END-IF
DISPLAY WS-CONCATENATED-OUTPUT(1:WS-POS)
您可以将其放在一个段落中并一遍又一遍地执行,但是我这样做是为了确切说明它在进行什么。当您在COBOL中定义图片子句时,它将始终保持该长度,因此,如果我只是尝试将3个变量串在一起,则它们之间将有大量的额外空间,因为每个图片子句的长度均为100个字符,而与我放置的内容无关在他们之中。我使用这些循环来计算每个变量的长度。首先,我检查以确保变量中包含某些内容,然后向后循环直到找到字符。
您没有说是否也需要修剪前导空格,因此我仅假设尾随空格。您也可以使用INSPECT TALLYING
来获取计数而不是编写循环
答案 1 :(得分:0)
使用UNSTRING
命令和TALLYING IN
和WITH POINTER
选项来跟踪要放置下一个字符串的位置。