конкатенация строк неизвестной длины в COBOL - PullRequest
4 голосов
/ 06 сентября 2008

Как объединить две строки неизвестной длины в 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            '

Ответы [ 3 ]

4 голосов
/ 06 сентября 2008

Я верю, что следующее даст вам то, что вы желаете.

STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.
3 голосов
/ 06 сентября 2008

На первый взгляд, решение состоит в том, чтобы использовать эталонную модификацию для 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. Объединить две строки вместе.
    • STRING FIR-NAME (1: ДЛИНА ПОЛЯ - ПРОБЕЖНЫЕ ПРОСТРАНСТВА) «« ПОСЛЕДНЕЕ ИМЯ РАЗДЕЛЕНО РАЗМЕРОМ В ПОЛНОЕ ИМЯ.
0 голосов
/ 19 апреля 2019

Вы можете попробовать сделать цикл для получения реальной длины.

...