TRIM без Enterprise PL/I

Как известно, Enterprise PL/I содержит ббольшое количество весьма полезных втроенных функций. Однако, не всегда имеется возможность использовать именно этот компилятор. А необходимость получить такую же функционльность имеется. Вот так и с BUILTIN функцией TRIM - она весьма полезна для решения большого количества задач. Давайте напишем небольшую процедуру, которая сможет собой заменить встроенный TRIM из комплекта Enterprise PL/I. Сложность написания данной функции крайне низка, но готовый код так или иначе сможет уменьшить суммарное время на разработку программы. /*********************************************************************/ /* TRIM LEADING AND TRAILING BLANKS */ /*********************************************************************/ TRIM: PROC(INSTR) RETURNS(CHAR(35)); DCL INSTR CHAR(35); DCL (M,START_IND) BIN FIXED(31); START_IND = 0; DO M = 1 TO 35 WHILE(START_IND = 0); IF CHAR_IN_STRING(SUBSTR(INSTR,M,1),ALPHABETIC||NUMERIC,62) THEN START_IND = M; END; IF START_IND ¬= 0 THEN DO M=35 TO START_IND BY -1; IF CHAR_IN_STRING(SUBSTR(INSTR,M,1),ALPHABETIC||NUMERIC,62) THEN RETURN(SUBSTR(INSTR,START_IND,M-START_IND+1)); END; RETURN(''); END TRIM; В примере я поставил ограничесние в 35 символов на входную строку. Никто не мешает сделать его любым другим. Или же использовать CHAR(*)NIKE

Отправить комментарий

  • Доступны HTML теги: <b> <i> <u> <br> <hr> <div> <span> <code> <pre>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <pli>.

Подробнее о форматировании

  _____    ___  
|___ | ( _ )
/ / / _ \
/ / | (_) |
/_/ \___/
Enter the code depicted in ASCII art style.