如何在 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 DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.

其他提示

乍一看,解决方案是使用对 STRING 的引用修改将两个字符串(包括空格)连接在一起。问题是您必须知道 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:字段长度 - 尾随空格)“ “ 按大小分隔的姓氏,变为全名。

您可以尝试制作一个循环以获得实际长度。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top