Подстрока COBOL между двумя конечными точками

Я понимаю, что string_variable(start:length) можно использовать для получения подстроки строки с заданной начальной точкой и длиной подстроки, однако я обнаружил, что мне часто нужно получить подстроку между «начальной» и «конечной» точкой.

Хотя я знаю, что всегда могу сделать это:

SUBTRACT start FROM end GIVING len
string(start:len)

Кажется громоздким делать это каждый раз, когда я пишу программы, которые часто используют эту функциональность. Возможно, есть более быстрый/встроенный способ достижения этого?


person Matt Haidet    schedule 15.02.2019    source источник


Ответы (1)


Как насчет?

    move str (start-pos : end-pos - start-pos + 1) to ...

Вы можете вычесть первое из последнего, но вам нужно добавить 1, чтобы получить правильную длину.

STRING — это имя оператора, как и START, а END зарезервировано. LENGTH — это имя функции. Я избегаю их во всем, что похоже на код.

person Rick Smith    schedule 15.02.2019
comment
Просто добавьте для @matt-haidet: вы также можете просто удалить len, если хотите заполнить остальную часть поля. Если вы используете текущий компилятор (я предполагаю, что вы добавили тег gnucobol ;-), то вы также можете создать определяемую пользователем функцию, которая принимает эти три параметра (возможно, len как необязательный) и возвращает результат обратно. . - person Simon Sobisch; 15.02.2019