объединение строк неизвестной длины в COBOL

StackOverflow https://stackoverflow.com/questions/46863

  •  09-06-2019
  •  | 
  •  

Вопрос

Как объединить две строки неизвестной длины в 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:ДЛИНА ПОЛЯ – КОНЕЧНЫЕ ПРОБЕЛЫ) « » ФАМИЛИЯ, ОГРАНИЧЕННАЯ ПО ​​РАЗМЕРУ, ДО ПОЛНОГО ИМЯ.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top