Dynamics NAV 2016 C/AL代码判断文本是否以'0000'结尾的方法
你遇到的情况很正常——NAV 2016的C/AL标准库确实没有Text.ENDSWITH()函数,这个函数是在后续的Microsoft Business Central版本(比如BC14及以后)才被引入的,所以你找不到自动补全、编译报错都是意料之中的事。
下面给你两种可靠的替代实现方法,都是用NAV2016原生支持的函数来完成:
方法一:使用Text.RIGHT()函数
这个方法最直观,直接提取文本的最后N个字符(这里N是目标后缀的长度,也就是4),再和目标后缀对比。需要注意先判断输入文本的长度是否足够,避免运行时出错:
LOCAL FUNCTION IsEndingWith0000@1000000000(InputText@1000000001 : Text) : Boolean; VAR TargetSuffix@1000000002 : Text[4]; BEGIN TargetSuffix := '0000'; // 先检查输入文本长度,避免取子串时触发错误 IF STRLEN(InputText) < STRLEN(TargetSuffix) THEN EXIT(FALSE); // 提取最后4个字符并对比 EXIT(Text.RIGHT(InputText, STRLEN(TargetSuffix)) = TargetSuffix); END;
方法二:使用Text.MID()函数
这种方法通过计算起始位置来提取后缀,逻辑和方法一类似,只是取子串的方式不同:
LOCAL FUNCTION IsEndingWith0000@1000000000(InputText@1000000001 : Text) : Boolean; VAR TargetSuffix@1000000002 : Text[4]; SuffixLength@1000000003 : Integer; BEGIN TargetSuffix := '0000'; SuffixLength := STRLEN(TargetSuffix); IF STRLEN(InputText) < SuffixLength THEN EXIT(FALSE); // 计算起始位置:总长度 - 后缀长度 + 1(因为C/AL的字符串索引从1开始) EXIT(Text.MID(InputText, STRLEN(InputText) - SuffixLength + 1, SuffixLength) = TargetSuffix); END;
额外优化建议
如果以后需要判断其他后缀,可以把TargetSuffix改成函数参数,做成通用的后缀判断函数,比如:
LOCAL FUNCTION TextEndsWith@1000000000(InputText@1000000001 : Text; TargetSuffix@1000000002 : Text) : Boolean; VAR SuffixLength@1000000003 : Integer; BEGIN SuffixLength := STRLEN(TargetSuffix); IF (SuffixLength = 0) OR (STRLEN(InputText) < SuffixLength) THEN EXIT(FALSE); EXIT(Text.RIGHT(InputText, SuffixLength) = TargetSuffix); END;
这样调用的时候直接写TextEndsWith(YourText, '0000')就可以了,复用性更强。
内容的提问来源于stack exchange,提问作者Immac
相关产品推荐
相关产品推荐

