字符串函数
字符串函数在任何一个应用中都得到了广泛的应用,报表工具也不例外,一般报表工具都会提供一部分的字符串处理的函数,例如获取子串、去掉空格、字符转换(字符转unicode或unicode转字符)、取字符长度、大小写转换、等等,随便都可以列出很多应用。
这些函数具体到每一个来说,并不是太难,程序员自己编程也能实现,但是字符串函数的应用非常多,一个两个甚至十个二十个程序员都可以自己写,太多了精力上就顾不过来了。
举几个简单的例子:
1、 取子串:有左子串、右子串、从中间取子串
2、 去掉空格:从左边去掉空格、从右边去掉空格、从两边去掉空格
3、 大小写转换:把字符串转为大写、转为小写、首字母大写等
上述只是一些比较常见的应用,还有更加麻烦复杂一些的,比如:
字符串分割:把某个字符串按照分隔符分割成一个字符串数组。
这个需求乍一听很简单,其实做起来并不容易,首先分割符要求能够灵活定义,不能写死;其次分隔符可能一位可能多位;接着解析分隔符的时候有时候需要解析引号里的,有时候不能解析引号里的,也就是说,如果引号里有分隔符要不要分割?引号有单引号还有双引号,除了引号还有括号,括号里的字符也可能存在分割与不分割两种情况,而且括号还分成小括号、中括号、大括号等等。这么仔细一想,头大了吧?
同样的需求在字符串替换里也存在,比如把某个字符串中的d替换成cc,这时候也需要考虑引号里的要不要替换,括号里的要不要替换等等诸多情况。
再举一个例子,如:
数字大小写转换:把数字转换成大写的汉字
这个例子听起来好简单啊,不就是把1替换成一,把2替换成二吗?谁不会呀!在实际应用中就两码事了,首先大写的数字有两种,一二三四五六七 和 壹贰叁肆伍陆柒,你需要提供参数配置替换成哪一种,另外,数字替换的时候有时候不需要个十百千这类标明数值位数和大小的字符,有时候却需要,你是否也应该提供参数配置?当然十百千也有另一种写法:拾佰仟。呵呵,足够复杂了吧?
不过不用害怕,一般来说,贴心的报表工具都会提供大量的字符串解析函数,字符串解析函数越多,其参数选项越灵活,报表工具就越好用。快逸报表提供了大量的字符串解析函数,而且每一个函数都提供了多个灵活的参数供选择,比如上面说到的数字大小写转换,快逸报表一个函数就搞定了,因此参数足够灵活也非常重要。有些报表工具厂商不善于对功能进行抽象总结,不知道在参数的灵活配置上下功夫,结果每一种需求都增加一个函数,最后搞得函数的个数非常多,使用者无所适从,不知道该用哪个。
举几个快逸字符串函数的介绍:
字符串分割函数
函数说明:
将字符串按分割符分割成多个子串
语法:
split( srcExp,sepExp{,boolExp})
参数说明:
srcExp 待分割的字符串表达式
sepExp 分隔符表达式
boolExp bool型,是否解析引号、括号里的分隔符,
为true时解析,为false时不解析,缺省为false
返回值:
分割后的字符串列表
示例:
例1:=split(“ab;cd;ef;tg;tt”,”;”) 返回数组:["ab","cd","ef","tg","tt"]
例2:=split(“ab;c’d;e’f;tg;tt”,”;”,false) 返回数组:["ab","c'd;e'f","tg","tt"] 不解析引号里的分隔符
例3:=split(“ab;c[d;e]f;tg;tt”,”;”,false) 返回数组:["ab","c[d;e]f”,”tg”,”tt”] 不解析括号里的分隔符
例4:=split(“ab;c’d;e’f;tg;tt”,”;”,true) 返回数组:["ab","c'd","e'f","tg","tt"] 解析引号里的分隔符
例5:=split(“ab;c[d;e]f;tg;tt”,”;”,true) 返回数组:["ab","c[d","e]f”,”tg”,”tt”] 解析括号里的分隔符
将数字转换成大写
函数说明:
将一个整数转化成汉字大写
语法:
chn( intExp{, abbrivateExp{, uppercaseExp }} )
参数说明:
intExp 整数表达式
abbrivateExp 为true时采用亿万千百十的写法,
为false时采用一二三四五六七的写法,缺省为false
uppercaseExp 为false时采用零一二三四五六七八九十百千,
为true时采用壹贰叁肆伍陆柒捌玖拾佰仟,缺省为false
返回值:
字符型
示例:
例1:chn(1234567,true) 返回:”一百二十三万四千五百六十七”
例2:chn(1234567) 返回:”一二三四五六七”
例3:chn(1234567,true,true) 返回:”壹佰贰拾叁万肆仟伍佰陆拾柒”
例4:chn(1234567,,false) 返回:”一二三四五六七”