在Axapta中实现split函数

本文介绍在Axapta环境中使用strFind和subStr函数手动实现字符串分割(split)功能的方法,并展示了如何利用Container简化这一过程。此外还讨论了str2con函数的特点及其局限性。

在Axapta中没有找到类似于C#中的split函数,在SQL Server中也没有类似的函数,当初写SQL函数的时候用了SQL Server中的系统函数charindex和substr来实现这样的功能,于是首先想到了用函数strFind和subStr来实现split函数.下列代码可以分解一个字符串并打印:

None.gifstatic void split(Args _args)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
int position;
InBlock.gif    str srcStr;
InBlock.gif    ;
InBlock.gif    srcStr 
= "AA,BB,CC,";
InBlock.gif
InBlock.gif    
while(true)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        position 
= strFind(srcStr,",",1,strlen(srcStr));
InBlock.gif        
InBlock.gif        
if(!position)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            print(srcStr);
InBlock.gif            
break;
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        print(subStr(srcStr,
1,position-1));
InBlock.gif        srcStr 
= subStr(srcStr,position+1,strlen(srcStr)-position);
ExpandedSubBlockEnd.gif    }

InBlock.gif    pause;
InBlock.gif
ExpandedBlockEnd.gif}
上面的代码显得臃肿并且很容易出错,因为要考虑边界情况,如果用Axapta中的Container实现这个功能就优雅得多,代码如下:
None.gifstatic void Split2(Args _args)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    Container c;
InBlock.gif    str srcStr;
InBlock.gif    
int i;
InBlock.gif    ;
InBlock.gif    srcStr 
= "AA,BB,CC,";
InBlock.gif
InBlock.gif    c 
= Global::str2con(srcStr,",");
InBlock.gif    
for(i=1;i<=conlen(c);i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        print(conpeek(c,i));
ExpandedSubBlockEnd.gif    }

InBlock.gif    pause;
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}
当然如果查看str2con的代码就会知道,str2con也是用了strScan和substr对字符串进行分析处理,不过眼不见心不烦,不是吗?呵呵.另外str2con用函数match判断了字符串如果可以转换成数字,就会把字符串转换成数字,这点不够可爱,可以自己写一个str2conXpp之类的,把这个match去掉.

转载于:https://www.cnblogs.com/Farseer1215/archive/2006/09/12/502468.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值