concatenating unknown-length strings in COBOL

血红的双手。 提交于 2019-12-22 08:38:57

问题


How do I concatenate together two strings, of unknown length, in COBOL? So for example:

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

If FIRST-NAME = 'JOHN ' and LAST-NAME = 'DOE ', how can I get:

FULL-NAME = 'JOHN DOE                       '

as opposed to:

FULL-NAME = 'JOHN            DOE            '

回答1:


I believe the following will give you what you desire.

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



回答2:


At first glance, the solution is to use reference modification to STRING together the two strings, including the space. The problem is that you must know how many trailing spaces are present in FIRST-NAME, otherwise you'll produce something like 'JOHNbbbbbbbbbbbbDOE', where b is a space.

There's no intrinsic COBOL function to determine the number of trailing spaces in a string, but there is one to determine the number of leading spaces in a string. Therefore, the fastest way, as far as I can tell, is to reverse the first name, find the number of leading spaces, and use reference modification to string together the first and last names.

You'll have to add these fields to working storage:

WORK-FIELD        PIC X(15) VALUE SPACES.
TRAILING-SPACES   PIC 9(3)  VALUE ZERO.
FIELD-LENGTH      PIC 9(3)  VALUE ZERO.
  1. Reverse the FIRST-NAME
    • MOVE FUNCTION REVERSE (FIRST-NAME) TO WORK-FIELD.
    • WORK-FIELD now contains leading spaces, instead of trailing spaces.
  2. Find the number of trailing spaces in FIRST-NAME
    • INSPECT WORK-FIELD TALLYING TRAILING-SPACES FOR LEADING SPACES.
    • TRAILING-SPACE now contains the number of trailing spaces in FIRST-NAME.
  3. Find the length of the FIRST-NAME field
    • COMPUTE FIELD-LENGTH = FUNCTION LENGTH (FIRST-NAME).
  4. Concatenate the two strings together.
    • STRING FIRST-NAME (1:FIELD-LENGTH – TRAILING-SPACES) “ “ LAST-NAME DELIMITED BY SIZE, INTO FULL-NAME.



回答3:


You could try making a loop for to get the real length.



来源:https://stackoverflow.com/questions/46863/concatenating-unknown-length-strings-in-cobol

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!