tiptop gp 之 split函數

不羅嗦,直接上代碼:

##############################################################
##功能:獲取固定分隔符裏某一項次的內容
##調用示例: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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章