123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- $PBExportHeader$u_xls_dfc_base_func.sru
- FORWARD
- GLOBAL TYPE u_xls_dfc_base_func FROM nonvisualobject
- END TYPE
- TYPE ust_ip_option_information FROM structure within u_xls_dfc_base_func
- END TYPE
- TYPE ust_icmp_echo_reply FROM structure within u_xls_dfc_base_func
- END TYPE
- END FORWARD
- TYPE ust_ip_option_information FROM structure
- Character ttl
- Character tos
- Character flags
- Character optionssize
- Long optionsdata
- END TYPE
- TYPE ust_icmp_echo_reply FROM structure
- UnsignedLong Address
- UnsignedLong status
- UnsignedLong roundtriphome
- UnsignedInteger datasize
- UnsignedInteger reserved
- UnsignedLong datapointer
- ust_ip_option_information Options
- Character Data[250]
- END TYPE
- GLOBAL TYPE u_xls_dfc_base_func FROM nonvisualobject AUTOINSTANTIATE
- END TYPE
- TYPE PROTOTYPES
- END PROTOTYPES
- TYPE VARIABLES
- END VARIABLES
- FORWARD PROTOTYPES
- PUBLIC FUNCTION String uf_replaceall (String psreplacestring, String psoldstring, String psnewstring)
- PUBLIC FUNCTION String uf_get_token (REF String pssource, String psseparator)
- PUBLIC FUNCTION Boolean uf_split (String pssource, String pssperator, REF String pssplit[])
- PUBLIC FUNCTION String uf_getkeyvalue (String psstring, String pskey)
- PUBLIC FUNCTION String uf_setkeyvalue (String psstring, String pskey, String psvalue)
- PUBLIC FUNCTION String uf_get_token (REF String pssource, String psseparator, Boolean pbremovecomma)
- PUBLIC FUNCTION Boolean uf_split (String pssource, String pssperator, REF String pssplit[], Boolean pbremovecomma)
- END PROTOTYPES
- PUBLIC FUNCTION String uf_replaceall (String psreplacestring, String psoldstring, String psnewstring);
- Long dlLen, dlPos, dlStart
- String dsResult
- dlLen = Len(psoldstring)
- dsResult = psreplacestring
- dlStart = 1
- DO WHILE TRUE
- dlPos = Pos(dsResult, psoldstring, dlStart)
- IF dlPos > 0 THEN
- dsResult = Replace(dsResult, dlPos, dlLen, psnewstring)
- dlStart = dlPos + Len(psnewstring)
- ELSE
- EXIT
- END IF
- LOOP
- RETURN dsResult
- END FUNCTION
- PUBLIC FUNCTION String uf_get_token (REF String pssource, String psseparator);
- RETURN uf_Get_Token(pssource, psseparator, TRUE)
- END FUNCTION
- PUBLIC FUNCTION Boolean uf_split (String pssource, String pssperator, REF String pssplit[]);
- RETURN uf_Split(pssource, pssperator, pssplit, TRUE)
- END FUNCTION
- PUBLIC FUNCTION String uf_getkeyvalue (String psstring, String pskey);
- String dsKey[]
- String dsValue[]
- Integer i
- psstring = uf_ReplaceAll(psstring, "~~t", "~t")
- uf_Split(psstring, "~t", dsKey)
- FOR i = 1 TO UpperBound(dsKey)
- uf_Split(dsKey[i], "=", dsValue)
- IF UpperBound(dsValue) >= 2 THEN
- IF Upper(Trim(dsValue[1])) = Upper(Trim(pskey)) THEN
- RETURN dsValue[2]
- END IF
- END IF
- NEXT
- RETURN ""
- END FUNCTION
- PUBLIC FUNCTION String uf_setkeyvalue (String psstring, String pskey, String psvalue);
- String dsKey[]
- String dsValue[]
- Integer i
- Boolean dbFound
- String dsString
- psstring = uf_ReplaceAll(psstring, "~~t", "~t")
- uf_Split(psstring, "~t", dsKey)
- dbFound = FALSE
- dsString = ""
- FOR i = 1 TO UpperBound(dsKey)
- uf_Split(dsKey[i], "=", dsValue)
- IF dsString <> "" THEN
- dsString += "~t"
- END IF
-
- IF UpperBound(dsValue) >= 2 THEN
- IF Upper(Trim(dsValue[1])) = Upper(Trim(pskey)) THEN
- dbFound = TRUE
- dsValue[2] = psvalue
- END IF
- dsString += dsValue[1] + "="
- IF Pos(dsValue[2], "=") > 0 OR Pos(dsValue[2], "~t") > 0 THEN
- IF Pos(dsValue[2], '"') = 0 THEN
- dsString += '"' + dsValue[2]+ '"'
- ELSEIF Pos(dsValue[2], "'") = 0 THEN
- dsString += "'" + dsValue[2] + "'"
- ELSE
- MessageBox("出错信息", "调用函数 uf_SetKeyValue 出错!~n~n" + &
- "关键字: " + dsValue[1] + "~n值: " + dsValue[2] + "~n~n" + &
- "无法处理值中的等于号(=)!", StopSign!)
- RETURN ""
- END IF
- ELSE
- dsString += dsValue[2]
- END IF
- ELSE
- dsString += dsValue[1]
- END IF
- NEXT
- IF NOT dbFound THEN
- IF dsString <> "" THEN
- dsString += "~t"
- END IF
- dsString += pskey + "="
-
- IF Pos(psvalue, "=") > 0 OR Pos(psvalue, "~t") > 0 THEN
- If (Left(psvalue, 1) = "'" AND Right(psvalue, 1) = "'") OR &
- Left(psvalue, 1) = '"' AND Right(psvalue, 1) = '"' THEN
- dsString += psvalue
- ELSE
- IF Pos(psvalue, '"') = 0 THEN
- dsString += '"' + psvalue + '"'
- ELSEIF Pos(psvalue, "'") = 0 THEN
- dsString += "'" + psvalue + "'"
- ELSE
- MessageBox("出错信息", "调用函数 uf_SetKeyValue 出错!~n~n" + &
- "关键字: " + pskey + "~n值: " + psvalue + "~n~n" + &
- "无法处理值中的等于号(=)!", StopSign!)
- RETURN ""
- END IF
- END IF
- ELSE
- dsString += psvalue
- END IF
- END IF
- RETURN dsString
- END FUNCTION
- PUBLIC FUNCTION String uf_get_token (REF String pssource, String psseparator, Boolean pbremovecomma);
- // uf_Get_Token
- // 参数:
- // psSource: 源串
- // psSparator: 分隔符
- // pbRemoveComma: 是否去除引号
- // 返回:
- // 分隔符前的串
- Long p
- Long dlPos
- String ret
- Boolean dbFoundComma1, dbFoundComma2
- // p = Pos(psSource, psSeparator) // Get the position of the psSeparator
- // 查找 psSource 中 psSeparator 的位置
- p = 0
- dbFoundComma1 = FALSE
- dbFoundComma2 = FALSE
- FOR dlPos = 1 TO Len(pssource)
- IF Mid(pssource, dlPos, 1) = '"' THEN
- dbFoundComma1 = NOT dbFoundComma1
- END IF
- IF Mid(pssource, dlPos, 1) = "'" THEN
- dbFoundComma2 = NOT dbFoundComma2
- END IF
- IF Mid(pssource, dlPos, 1) = psseparator THEN
- IF NOT dbFoundComma1 AND NOT dbFoundComma2 THEN
- p = dlPos
- EXIT
- END IF
- END IF
- NEXT
- IF p = 0 THEN // if no psSeparator,
- ret = pssource // return the whole psSource string and
- pssource = "" // make the original psSource of zero length
- ELSE
- ret = Mid (pssource, 1, p - 1) // otherwise, return just the token and
- pssource = Mid (pssource, p + Len ( psseparator )) // strip it & the psSeparator
- END IF
- ret = Trim(ret)
- ret = uf_ReplaceAll(ret, "''", "'")
- ret = uf_ReplaceAll(ret, '""', '"')
- IF pbremovecomma THEN
- IF Left(ret, 1) = Right(ret, 1) AND &
- (Left(ret, 1) = "'" OR Left(ret, 1) = '"') THEN
- ret = Mid(ret, 2, Len(ret) - 2)
- END IF
- END IF
- RETURN ret
- END FUNCTION
- PUBLIC FUNCTION Boolean uf_split (String pssource, String pssperator, REF String pssplit[], Boolean pbremovecomma);
- // uf_Split
- // 参数
- // psSource
- // psSperator
- // psSpilt
- // pbRemoveComma: 去除引号
- Integer i
- Boolean dbFound
- // 判断 psSource 的最后是否是分隔符, 如果是, 则在最后添加一个空值
- IF Right(pssource, Len(pssperator)) = pssperator THEN
- dbFound = TRUE
- ELSE
- dbFound = FALSE
- END IF
- i = 0
- DO WHILE pssource <> ""
- i ++
- pssplit[i] = Trim(uf_Get_Token(pssource, pssperator, pbremovecomma))
- LOOP
- // 如果最后一个值是分隔符, 则添加一个空值在最后
- IF dbFound THEN
- i ++
- pssplit[i] = ""
- END IF
- RETURN TRUE
- END FUNCTION
- ON u_xls_dfc_base_func.CREATE
- CALL SUPER::CREATE
- TriggerEvent( THIS, "constructor" )
- END ON
- ON u_xls_dfc_base_func.DESTROY
- TriggerEvent( THIS, "destructor" )
- CALL SUPER::DESTROY
- END ON
|