如何在 CLLE 中修剪变量?
user278576
问问题
6960 次
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*
于 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 回答