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(*)

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

  • Доступны 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.