在CLLE中修剪变量

时间:2010-02-22 10:01:05

标签: ibm-midrange control-language

如何修剪CLLE中的变量?

4 个答案:

答案 0 :(得分:3)

CLLE中没有标准功能TRIM。然而,

  • 如果要粘合两个变量,请查看* TCAT(或|<)。此命令删除其间的空白(例如'xyz'* TCAT'uvw'变为'xyzuvw'
  • 如果你真的想要修剪,那么试试''* TCAT $ YOURVAR * TCAT''(现在不能自己尝试这个。不在家里/ 400周围......)
  • 或者使用您正在使用 ILE CL的事实。您可以使用命令CALLPRC来调用可以执行此操作的模块!用ILE RPG或COBOL自己编写该模块。

答案 1 :(得分:1)

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

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

要查找不包括尾随空格的字符长度,您需要使用%SST(&amp; VAL&amp; 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的网站herehere

答案 2 :(得分:1)

我知道这是旧的,但您可以使用%TRIM(&amp; myVariable)

答案 3 :(得分:0)

在%TRIM()之前的版本中,%TRIML()和%TRIMR()可用,ILE CL可以使用'triml'C库函数:

dcl   &lPath       *int            value( 0 )

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

proc在* SRVPGM QC2UTIL1中找到。

在OPM和ILE CL中,我经常使用:

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

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

在这两种情况下,可以在%SST()表达式中使用生成的长度来实现实际修剪。