검색해보니 토큰으로 되어 있는 글에는 없어서 올립니다.
두 가지 형태가 들어가 있구요.
첫번째는
ls_parm = 'A!B!C'
일 경우 ..
ls_val1 = gf_tokenize(ls_parm, '!')
하면..
ls_val1 에는 'A' 가 들어가 있고, ls_parm 에는 'B!C' 가 남게 됩니다.
두번재는
ls_val1 = gf_tokenize(ls_parm, '!', 1)
하면..
ls_val1 에는 첫번째 토큰( !) 까지 값인 A 가 남고, ls_parm 은 그대로 'A!B!C' 값을 가지고 있게 됩니다.
/++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/
global type gf_tokenize from function_object end type
forward prototypes global function string gf_tokenize (ref string as_source, string as_separator) global function string gf_tokenize (string as_source, string as_separator, integer ai_position) end prototypes
global function string gf_tokenize (ref string as_source, string as_separator);/*********************************************************************/ // Function : gf_tokenize() // Return Value // String Tokenize 결과물 // Arguments // Pass By Reference String as_source // Pass By ReadOnly String as_separator /**********************************************************************/ integer li_pos string ls_retValue
if isnull( as_source ) or IsNull( as_separator ) THEN String ls_Null
SetNull( ls_Null ) Return ls_Null END IF
li_pos = Pos( as_source, as_separator ) IF li_pos = 0 THEN ls_retValue = as_source as_source = "" ELSE ls_retValue = Mid( as_source, 1, li_pos - 1 ) as_source = Right( as_source, Len(as_source) - (li_pos + Len( as_separator ) -1 ) ) END IF
Return ls_retValue end function
global function string gf_tokenize (string as_source, string as_separator, integer ai_position) /*********************************************************************/ // Function : gf_Tokenizer // Return Value // String Tokenize 결과물 // Arguments // Pass By ReadOnly String as_source // Pass By ReadOnly String as_separator // Pass By ReadOnly integer ai_position(음수일 경우는 오른쪽부터 찾는다.) /**********************************************************************/ integer count, start_pos = 1, str_length, end_pos = 0 string ret_value, ls_source, ls_left_source STring ls_temp_source integer li_pos, li_end_pos = 0 boolean end_chk = false, null_chk = false String ls_Null SetNull( ls_Null ) ls_source = as_source if isnull( as_source ) or IsNull( as_separator ) THEN Return '' IF ai_position = 0 THEN null_chk = true IF ai_position < 0 THEN //뒤에서 찾는다. For count = 1 to ABS(ai_position) IF count > 1 THEN ls_source = left(ls_source, end_pos - 1) //as_separator 가 있는 마지막 위치를 구한다. //lastPos는 한글일 경우에도 1byte로 계산하므로, do loop을 이용해서 구한다. ls_temp_source = ls_source do li_pos = Pos( ls_temp_source, as_separator ) If li_pos > 0 THEN li_end_pos += li_pos ls_temp_source = mid(ls_temp_source, li_pos + Len(as_separator)) END IF loop until(li_pos = 0) end_pos = li_end_pos IF end_pos = 0 and count < ai_position then null_chk = true exit ELSEIF end_pos = 0 THEN start_pos = 1 ELSE start_pos = end_pos + Len(as_separator) END IF NEXT if null_chk then ret_value = ls_Null else ret_value = mid(ls_source, start_pos) end IF ELSE //앞에서 찾는다.. for count = 1 to ai_position IF count > 1 THEN ls_source = mid(ls_source, end_pos + Len(as_separator)) end_pos = pos(ls_source, as_separator, 1) IF end_pos = 0 and count < ai_position THEN null_chk = true exit ELSEIF end_pos = 0 THEN ls_left_source = ls_source ELSE ls_left_source = left(ls_source, end_pos - 1) END IF next if null_chk then ret_value = ls_Null else ret_value = ls_left_source end if END IF if isnull(ret_value) then ret_value = '' return ret_value end function |