如何修剪CLLE中的变量?
答案 0 :(得分:3)
CLLE中没有标准功能TRIM。然而,
答案 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 *
答案 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()表达式中使用生成的长度来实现实际修剪。