为了适应更多的应用情境,对之前的版本做了返回值的自适应处理,源码如下
/*
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