4

如何在 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            '
4

3 回答 3

5

我相信下面的内容会给你你想要的。

STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.
于 2008-09-06T00:11:00.563 回答
3

乍一看,解决方法是使用引用修改将两个字符串串在一起,包括空格。问题是您必须知道 FIRST-NAME 中有多少个尾随空格,否则您将产生类似“JOHNbbbbbbbbbbbbDOE”的内容,其中 b 是一个空格。

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

您必须将这些字段添加到工作存储中:

WORK-FIELD        PIC X(15) VALUE SPACES.
TRAILING-SPACES   PIC 9(3)  VALUE ZERO.
FIELD-LENGTH      PIC 9(3)  VALUE ZERO.
  1. 颠倒名字
    • 将功能反向(名字)移动到工作领域。
    • WORK-FIELD 现在包含前导空格,而不是尾随空格。
  2. 查找 FIRST-NAME 中尾随空格的数量
    • 检查领先空间的工作现场统计尾随空间。
    • TRAILING-SPACE 现在包含 FIRST-NAME 中的尾随空格数。
  3. 查找 FIRST-NAME 字段的长度
    • 计算字段长度 = 函数长度(名字)。
  4. 将两个字符串连接在一起。
    • 字符串名字(1:字段长度 - 尾随空格)“”按大小分隔的姓氏,变成全名。
于 2008-09-05T21:12:52.067 回答
0

您可以尝试制作一个循环以获得真正的长度。

于 2019-04-19T15:03:09.253 回答