在COBOL中串联未知长度的字符串

时间:2020-03-05 18:48:31  来源:igfitidea点击:

如何在COBOL中将长度未知的两个字符串连接在一起?因此,例如:

WORKING-STORAGE.
    FIRST-NAME    PIC X(15) VALUE SPACES.
    LAST-NAME     PIC X(15) VALUE SPACES.
    FULL-NAME     PIC X(31) VALUE SPACES.

如果FIRST-NAME ='JOHN'LAST-NAME ='DOE',我如何获得:

FULL-NAME = 'JOHN DOE                       '

相对于:

FULL-NAME = 'JOHN            DOE            '

解决方案

回答

乍一看,解决方案是对两个字符串(包括空格)一起使用STRING的引用修改。问题是我们必须知道FIRST-NAME中存在多少尾随空格,否则我们将生成类似" JOHNbbbbbbbbbbbbbbDOE"的内容,其中b是空格。

没有内在的COBOL函数来确定字符串中尾随空格的数量,但是有一个函数来确定字符串中前导空格的数量。因此,据我所知,最快的方法是反转名字,找到前导空格的数量,并使用引用修饰将名字和姓氏串在一起。

我们必须将以下字段添加到工作存储中:

WORK-FIELD        PIC X(15) VALUE SPACES.
TRAILING-SPACES   PIC 9(3)  VALUE ZERO.
FIELD-LENGTH      PIC 9(3)  VALUE ZERO.
  • 现在,WORK-FIELD包含前导空格,而不是尾随空格。
  • TRAILING-SPACE现在包含FIRST-NAME中的尾随空格数。

回答

我相信以下内容将给我们我们想要的东西。

STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.