Обрезка переменной в CLLE - PullRequest
3 голосов
/ 22 февраля 2010

Как вы можете обрезать переменную в CLLE ??

Ответы [ 4 ]

3 голосов
/ 24 февраля 2010

В CLLE нет стандартной функции TRIM.Однако

  • Если вы хотите склеить две переменные, посмотрите на * TCAT (или | <).Эта команда удаляет пробелы между ними (например, 'xyz' * TCAT 'uvw' становится 'xyzuvw' </li>
  • Если вы действительно хотите обрезать, то попробуйте '' * TCAT $ YOURVAR * TCAT '' (не могуПопробуйте сами сейчас. Нет, так как / 400 дома ...)
  • Или используйте тот факт, что вы работаете с ILE CL. Вы можете использовать команду CALLPRC для вызовамодуль, который может добиться цели! Напишите этот модуль самостоятельно с помощью ILE RPG или COBOL.
1 голос
/ 30 сентября 2015

Я знаю, что это старый, но вы можете использовать% TRIM (& myVariable)

1 голос
/ 10 марта 2010

Поскольку все переменные в CL имеют фиксированную длину, логического требования для обрезки как такового нет.

Чтобы объединить два значения без пробелов, используйте оператор |<, а для включения одного пробела используйте |>.

Чтобы найти длину в символах, исключая завершающие пробелы, вам нужно сделать хороший шаг назад по значению, используя% SST (& VAL & POS 1), чтобы проверить каждую позицию символа для пробела.Что-то вроде:

DCL &LEN *DEC (15 0)
DCL &VAL *CHAR 50 VALUE('Some test data')
DCL &CHR15 *CHAR 15

CHGVAR &LEN 50
LOOP: IF (&LEN > 1 & %SST(&VAL &LEN 1)==' ') (DO)
    CHGVAR &LEN VALUE(&LEN - 1)
    GOTO LOOP
    ENDDO

CHGVAR &CHR15 &LEN
SNDPGMMSG ('The length is' |> &CHR15) /* Can't concat decimal values */

Чтобы просто завершить нулем значение, например, сделать вызов функции C:

DCL &VAL    *CHAR 50 VALUE('Some test text')
DCL &VALNUL *CHAR 51 /* +1 for the null */
DCL &NULL   *CHAR  1 VALUE(X'00')

CHGVAR &VALNUL VALUE(&VAL |< &NULL)

РЕДАКТИРОВАТЬ 2012-07-19*

В некоторых наборах символов ! используется вместо |.Вместо этого можно использовать независимую от CCSID операцию * CAT.См. Веб-сайт IBM здесь и здесь .

0 голосов
/ 01 октября 2015

В выпусках до того, как стали доступны% TRIM (),% TRIML () и% TRIMR (), ILE CL мог использовать библиотечную функцию «triml» C:

dcl   &lPath       *int            value( 0 )

callprc  'triml'  ( +
                    &Dir           +
                    ( ' ' *byval ) +
                  ) +
            rtnval( &lPath )

Процесс находится в * SRVPGM QC2UTIL1.

В OPM и ILE CL я часто использовал:

dcl   &lmsgtxt1    *dec  (   5 0 ) value( 0 )

rtvmsg     msgid( cpf9897 ) msgf( QSYS/QCPFMSG ) +
             msgdta( &SQLStm )    +
             msglen( &lmsgtxt1 )

В обоих случаях результирующая длина может затем использоваться в выражении% SST () для выполнения фактической обрезки.

...