PB powerbuilder 升级版字符串切割函数

为了适应更多的应用情境,对之前的版本做了返回值的自适应处理,源码如下

/*
as_reference_str: 切割参照的字符或字符串
as_original_str:  目标字符串
index:            返回参照索引

----------------------------------------------------------------------
调用示例:
ls_target =' E:\shauto\res\checkbox-unchecked.png'

----------------------------------------------------------------------
返回一个列表:
gf_split('\',ls_target,0)  return 
: E:#shauto#res#checkbox-unchecked.png#

----------------------------------------------------------------------
返回第一个切割项:
gf_split('\',ls_target,1)  return: E:

----------------------------------------------------------------------
返回倒数第一个切割项:
gf_split('\',ls_target,-1)  return: checkbox-unchecked.png

----------------------------------------------------------------------
返回第二个切割项:
gf_split('\',ls_target,2)  return: shauto

----------------------------------------------------------------------
index越界,返回空字符
gf_split('\',ls_target,10)  return: 

----------------------------------------------------------------------
不同的参照字符
gf_split(':',ls_target,2)  return: \shauto\res\checkbox-unchecked.png

----------------------------------------------------------------------
参照字符串
gf_split('res',ls_target,10)  return: \checkbox-unchecked.png

*/

string  ls_return[]
string  ls_temp
integer ll_pos
integer li_len
integer i = 1

li_len = len(as_reference_str)                   //切割参照的字符串的长度
ll_pos = pos(as_original_str,as_reference_str)   //在目标字符串中查找参照的字符

do
	if ll_pos = 0 then 
		//没有查找到,原字符串写入数组
		ls_return[i] = as_original_str
	else		
		//找到了,把参照字符前面的字符串写入数组
		ls_return[i] = left(as_original_str,ll_pos - 1)	
		
		//数组索引+1
		i++	
		
		//删除已切割的字符串和参照的字符
	   as_original_str = mid(as_original_str,ll_pos + li_len)
		
		//在目标字符串中继续查找参照的字符
		ll_pos          = pos(as_original_str,as_reference_str)
		
		//如果没有找到,把剩下的字符串写入数组
		if ll_pos = 0 then ls_return[i] = as_original_str
		
	end if
loop while ll_pos <> 0

if abs(index) > upperbound(ls_return) and abs(index) <> 1 then
	//超出了数组元素个数,返回''
	return ''
	
elseif index = 0 then	
	//index = 0 返回整个数值
	return ls_return
	
elseif index < 0 then	
	//index < 0 数组从后往前取
	//比如一共7个元素,-1
	// -1 + 7 + 1 =  7 ,也就是最后一共
	index += upperbound(ls_return) + 1
	return ls_return[index]
	
else
	//index > 0 且 小于或等于数组元素总数,就直接取
	return ls_return[index]
	
end if

在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值