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

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

concatenating unknown-length strings in COBOL

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

1
2
3
4
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 ',如何获取:

1
FULL-NAME = 'JOHN DOE                       '

相对于:

1
FULL-NAME = 'JOHN            DOE            '

我相信以下内容会给您您所想要的。

1
2
3
4
5
STRING
FIRST-NAME DELIMITED BY"",
"",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.

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

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

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

1
2
3
WORK-FIELD        PIC X(15) VALUE SPACES.
TRAILING-SPACES   PIC 9(3)  VALUE ZERO.
FIELD-LENGTH      PIC 9(3)  VALUE ZERO.
  • 颠倒名字

    • 将功能反向(名字)移动到工作区域。
    • 现在,WORK-FIELD包含前导空格,而不是尾随空格。
  • 查找FIRST-NAME中的尾随空格数

    • 检查领先的空间的工作现场对话空间。
    • TRAILING-SPACE现在包含FIRST-NAME中的尾随空格数。
  • 查找FIRST-NAME字段的长度

    • 计算字段长度=功能长度(名字)。
  • 将两个字符串连接在一起。

    • STRING姓氏(1:字段长度为" TRAILING-SPACES")吗?一个?姓氏由SIZE(大小)分隔成FULL-NAME(全名)。

  • 您可以尝试进行循环以获取实际长度。


    推荐阅读