Ibm midrange CLLE中的微调变量
如何在CLLE中修剪变量???CLLE中没有可用的标准函数修剪。但是,Ibm midrange CLLE中的微调变量,ibm-midrange,control-language,Ibm Midrange,Control Language,如何在CLLE中修剪变量???CLLE中没有可用的标准函数修剪。但是, 如果要粘合两个变量,请查看*TCAT(或|),因为CL中的所有变量都是固定长度的,因此没有修剪本身的逻辑要求 若要在不插入空格的情况下连接两个值,请使用| 要查找不包括尾随空格的字符长度,您需要使用%SST(&VAL&POS 1)对该值进行良好的向后遍历,以测试每个字符的空格位置。类似于: DCL &LEN *DEC (15 0) DCL &VAL *CHAR 50 VALUE('Some test dat
- 如果要粘合两个变量,请查看*TCAT(或|),因为CL中的所有变量都是固定长度的,因此没有修剪本身的逻辑要求
若要在不插入空格的情况下连接两个值,请使用
要查找不包括尾随空格的字符长度,您需要使用%SST(&VAL&POS 1)对该值进行良好的向后遍历,以测试每个字符的空格位置。类似于:|
要简单地为null终止一个值,例如,调用一个C函数: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 */
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)
dcl &lPath *int value( 0 ) callprc 'triml' ( + &Dir + ( ' ' *byval ) + ) + rtnval( &lPath )
编辑2012-07-19*DCL&VAL*CHAR 50值('一些测试文本') DCL和VALNUL*字符51/*+1表示空值*/ DCL&空*字符1值(X'00') CHGVAR和VALNUL值(&VAL |<&NULL)
在某些字符集中,使用
代替!
。也可以使用与CCSID无关的*CAT操作。请参阅IBM的网站和。我知道这很旧,但您可以在%TRIM()、%TRIML()和%TRIMR()之前的版本中使用%TRIM(&myVariable)如果可用,ILE CL可以使用“triml”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)
该过程可在*SRVPGM QC2UTIL1中找到 在OPM和ILE CL中,我经常使用:dcl &lPath *int value( 0 ) callprc 'triml' ( + &Dir + ( ' ' *byval ) + ) + rtnval( &lPath )
dcl &lmsgtxt1 *dec ( 5 0 ) value( 0 ) rtvmsg msgid( cpf9897 ) msgf( QSYS/QCPFMSG ) + msgdta( &SQLStm ) + msglen( &lmsgtxt1 )
在这两种情况下,生成的长度都可以用在%SST()中表达式来实现实际的微调。如果需要,我可以给您一个RPG示例。RPG是我在iSeries上的首选语言。*TCAT去除运算符左侧操作数的尾随空格;而右侧操作数的前导空格不去除:-(因此第二个示例表达式的效果是[根据CPD0126,根据不允许作为字符串文字的空字符串的编码,甚至不支持]将匹配TRIMR而不是TRIM的效果[如果首先更正,则使用空白文字。为了强调这一点,第一个示例表达式通常不会删除空白,只会从'xyz'
中删除一个尾随空白,而成为'xyz'*TCAT'uvw'
,在哪个版本中引入了这些操作符?操作符'xzy uvw'
在我们的V6R1上不起作用。因为字符.
在所有EBCDIC代码页中都不在同一位置,所以我不认为使用它们来代替
是一个好主意。@kratenko:看我的编辑-它们至少从V3开始就存在,我敢打赌从V1开始就存在了。从t开始,各种操作符就一直存在he System/38(AS/400系列的前身)。有关i 6.1文档,请参阅表达式中的运算符主题。如果它们在给定系统上不起作用,则问题几乎肯定是设备描述配置不正确;KBDTYPE()和/或CHRID()属性可能与系统配置不匹配。顺便说一句,事实是它们“不工作”在某些系统上不使用它们是最大的原因。对本地系统或给定*DEVD的更改可能会使它们无法工作,即使它们以前工作过。@user2338816:不工作只能应用于尝试编译源代码并收到错误。一旦编译完,源代码中使用的运算符就不相关。这当然没有意义打开以避免使用它们。*TCAT