##功能:获取固定分隔符里某一项次的内容
##调用示例:LET l_str=split("abc/def/ghi","/",2)
##参数说明:p_arg1--原始字符串
## p_arg2--分隔符
## p_arg3--返回第几个字符(上例返回值为"def")
##函数也可以写成这样子:
## split("/abc/def/ghi","/",8)
## split("abc/def/ghi/","/",8)
## split("/abc/def/ghi/","/",8)
## split("/abc|def;ghi/","/|;",8) (多种分隔符混合)
## split("abc\\def\\ghi\\aaa\\bbb","\\",3)
##备注:分隔符不可以是\,请用\\代替
##############################################################
FUNCTION split(p_arg1,p_arg2,p_arg3)
DEFINE p_arg1 STRING
DEFINE p_arg2 STRING
DEFINE p_arg3 INTEGER
DEFINE l_cnt INTEGER
DEFINE l_idx INTEGER
DEFINE l_retstr STRING
DEFINE l_str STRING
DEFINE tok base.StringTokenizer
INITIALIZE l_retstr TO NULL
LET tok = base.StringTokenizer.create(p_arg1,p_arg2)
LET l_cnt = tok.countTokens()
IF (p_arg3 <= 0) OR (l_cnt <= 0 ) OR (p_arg3 > l_cnt) THEN
LET l_retstr = NULL
ELSE
LET l_idx = 1
WHILE tok.hasMoreTokens()
LET l_str = tok.nextToken()
IF l_idx = p_arg3 THEN
LET l_retstr = l_str
EXIT WHILE
END IF
LET l_idx = l_idx + 1
END WHILE
END IF
RETURN l_retstr
END FUNCTION
FUNCTION split_itemcount(p_arg1,p_arg2)
DEFINE p_arg1 STRING
DEFINE p_arg2 STRING
DEFINE l_cnt INTEGER
DEFINE tok base.StringTokenizer
LET tok = base.StringTokenizer.create(p_arg1,p_arg2)
LET l_cnt = tok.countTokens()
RETURN l_cnt
END FUNCTION
调用示例:
MAIN
DEFINE i INTEGER
DEFINE src STRING
DEFINE delim STRING
DISPLAY "----正常调用测试--------"
DISPLAY 'split("abc/def/ghi","/",2) = ',split("abc/def/ghi","/",2)
DISPLAY 'split("/abc/def/ghi/aaa/bbb/","/",4) = ',split("/abc/def/ghi/aaa/bbb/","/",4)
DISPLAY 'split("/abc/def/ghi/aaa/bbb/","/",1) = ',split("/abc/def/ghi/aaa/bbb/","/",1)
DISPLAY 'split("/abc/def/ghi/aaa/bbb","/",5) = ',split("/abc/def/ghi/aaa/bbb","/",5)
DISPLAY 'split("/abc/def;ghi aaa bbb","/; ",4) = ',split("/abc/def;ghi aaa bbb","/; ",4)
DISPLAY 'split("/abc/def/ghi/aaa/bbb","/",8) = ',split("/abc/def/ghi/aaa/bbb","/",8)
DISPLAY 'split("abc\\def\\ghi\\aaa\\bbb","\\",3) = ',split("abc\\def\\ghi\\aaa\\bbb","\\",3)
DISPLAY 'split("abc def ghi aaa bbb"," ",3) = ',split("abc def ghi aaa bbb"," ",3)
DISPLAY "-------异常调用测试-------"
DISPLAY 'split("abc/def/ghi/aaa/bbb","",3) = ',split("abc/def/ghi/aaa/bbb","",3)
DISPLAY 'split("abc/def/ghi/aaa/bbb","/",-3) = ',split("abc/def/ghi/aaa/bbb","/",-3)
DISPLAY 'split("abc/def/ghi/aaa/bbb","|",3) = ',split("abc/def/ghi/aaa/bbb","|",3)
DISPLAY 'split("abc/def/ghi|aaa/bbb","/",3) = ',split("abc/def/ghi|aaa/bbb","/",3)
DISPLAY 'split("","/",3) = ',split("","/",3)
DISPLAY 'split("abc","/",1) = ',split("abc","/",1)
DISPLAY 'split("abc","",1) = ',split("abc","",1)
DISPLAY "-------遍历字符串----------"
LET src="abc|hello world|good morning|day day up|"
LET delim="|"
FOR i = 1 TO split_itemcount(src,delim)
DISPLAY i using '##'," ",split(src,delim,i)
END FOR
END MAIN
转载请注明:赫非域 » tiptop gp 之 重写split函数