3

如何在 CLLE 中修剪变量?

4

4 回答 4

3

CLLE 中没有可用的标准函数 TRIM。然而,

  • 如果您想粘合两个变量,请查看 *TCAT(或 |<)。此命令删除中间的空格(例如 'xyz ' *TCAT 'uvw' 变为 'xyzuvw'
  • 如果你真的想修剪,那么试试 '' *TCAT $YOURVAR *TCAT '' (现在不能自己尝试这个。家里没有 as/400 ...)
  • 或者使用您正在使用ILE CL的事实。您可以使用命令 CALLPRC 来调用可以解决问题的模块!使用 ILE RPG 或 COBOL 自己编写该模块。
于 2010-02-24T18:38:07.117 回答
2

我知道这很旧,但您可以使用 %TRIM(&myVariable)

于 2015-09-30T17:13:54.463 回答
1

由于 CL 中的所有变量都是固定长度的,因此对其本身没有逻辑要求。

要在不插入空格的情况下连接两个值,请使用|<运算符,并包含单个空格 use |>

要查找不包括尾随空格的字符长度,您需要使用 %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 的网站。

于 2010-03-10T07:20:21.103 回答
0

在 %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() 表达式中使用得到的长度来实现实际的修剪。

于 2015-10-01T16:04:18.850 回答