题
如何在 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.
- 颠倒名字
- 将功能反向(名字)移至工作区域。
- WORK-FIELD 现在包含前导空格,而不是尾随空格。
- 查找 FIRST-NAME 中尾随空格的数量
- 检查工作场计数尾随空格是否有前导空格。
- TRAILING-SPACE 现在包含 FIRST-NAME 中尾随空格的数量。
- 查找 FIRST-NAME 字段的长度
- 计算字段长度 = 函数长度(名字)。
- 将两个字符串连接在一起。
- 字符串名字(1:字段长度 - 尾随空格)“ “ 按大小分隔的姓氏,变为全名。
您可以尝试制作一个循环以获得实际长度。
不隶属于 StackOverflow