几个为Vfp6写的函数,单位系统用vfp6开发。不打算升级的Vfp9.针对现在互联网时代所写的几个函数
Func Strextract(cSearchExpression, cBeginDelim , cEndDelim , nOccurrence)
*!* *******************************************
*!* Create By Alan Hung
*!* Create Date 2017-05-31
*!* Example:cStr=Strextract('<a>a</a><abc>abc</abc><a>b</a>','<a>','</a>',2)
*!* ?cStr
*!* 'b'
*!* 说明:本函数用于解析网页和Xml表,为Vfp6写
*!* *******************************************
if empty(nOccurrence)
nOccurrence=1
endif
if empty(cSearchExpression)
retur ''
endif
if empty(cBeginDelim )
retur ''
endif
if vartype(cEndDelim )<>'C'
cEndDelim =''
endif
LnDelLen=Len(cBeginDelim+'a')-2
return right(Left(cSearchExpression,atc(cEndDelim,cSearchExpression,nOccurrence)-1),;
atc(cEndDelim,cSearchExpression,nOccurrence)-1-atc(cBeginDelim,cSearchExpression,nOccurrence)-LnDelLen)
endfunc
Func icase
Lpara LToPara1,LToPara2,LToPara3,LToPara4,LToPara5,LToPara6,LToPara7,LToPara8,LToPara9,LToPara10,;
LToPara11,LToPara12,LToPara13,LToPara14,LToPara15,LToPara16,LToPara17,LToPara18,LToPara19,LToPara20,;
LToPara21,LToPara22,LToPara23,LToPara24,LToPara25,LToPara26,LToPara27
*!* *******************************************
*!* Create By Alan Hung
*!* Create Date 2002-05-26
*!*Example:aa=icase(a=1,'2',a=2,'f',a=3,'g','a')
*!* 如果 a=1 aa='2'类推,为Vfp6写
*!* *******************************************
Local LnMaxPCount,PARANAME,LcParaName
PARANAME='LToPara'
LnMaxPCount=PCount()
LnForPCount=iif(mod(LnMaxPCount,2)=0,LnMaxPCount,LnMaxPCount-1)
For i001=1 to LnForPCount
If mod(i001,2)=1
LcParaName=PARANAME+allt(str(i001))
Else
Loop
Endif
If type(LcParaName)='L'
If &LcParaName
LcParaName=PARANAME+allt(str(i001+1))
Return &LcParaName
Endif
Endif
Endfor
If mod(LnMaxPCount,2)=1
LcParaName=PARANAME+allt(str(LnMaxPCount))
Return &LcParaName
Else
Return ''
Endif
Endfunc
Func GetWordNum
Lpara cString,nIndex,cDelimiters
*!* *******************************************
*!* Create By Alan Hung
*!* Create Date 2002-05-26
*!*Example:aa=getwordnum('aaaa,bbbbb,ddc',1,',') aa='aaaa'
*!* aa=getwordnum('aaaa,bbbbb,ddc',2,',') aa='bbbbb',为Vfp6写
*!* *******************************************
If empty(cString) or empty(nIndex)
Return ''
Endif
If Vartype(cDelimiters)<>'C'
cDelimiters=icase(at(' ',cString)>0,' ',at(chr(13),cString)>0,chr(13),chr(10))
Endif
Local LnDelLen,LnTmpIndex,LcReturnValue
LnDelLen=Len(cDelimiters+'a')-2
LnTmpIndex=1
LcReturnValue=''
cString=cString+cDelimiters
If nIndex>1
LcReturnValue=right(Left(cString,at(cDelimiters,cString,nIndex)-1),at(cDelimiters,cString,nIndex)-1-at(cDelimiters,cString,nIndex-1)-LnDelLen)
Else
LcReturnValue=LEFT(cString,at(cDelimiters,cString)-1)
Endif
Return LcReturnValue
Endfunc
Func GetWordCount(cString,cDelimiters)
*!* *******************************************
*!* Create By Alan Hung
*!* Create Date 2002-05-26
*!*GetWordNum能返回的最大值数,为Vfp6写
*!* *******************************************
Return OCCURS(cDelimiters, cString)+1
Endfunc
Func MyAlines(arrayName,cString,cDelimiters)
*!* *******************************************
*!* Create By Alan Hung
*!* Create Date 2017-02-26
*!* Example: dime astr(1) aStr=Myalines(@astr,'a,b,c',',')
*!* 结果: aStr(1)='a',aStr(2)='b',aStr(3)='c'
*!* 说明:第一个数组名称,传入字符串,返回数组,为Vfp6写
*!* *******************************************
If empty(cString)
dime arrayName(1)
arrayName(1)=''
Return
Endif
If Vartype(cDelimiters)<>'C'
cDelimiters=icase(at(chr(13),cString)>0,chr(13),at(chr(10),cString)>0,chr(10),'')
Endif
Local LnDelLen,LnTmpIndex
LnDelLen=Len(cDelimiters+'a')-2
LnTmpIndex=1
cString=cString+cDelimiters
Do while at(cDelimiters,cString)>0
dime arrayName[LnTmpIndex]
LcReturnValue=LEFT(cString,at(cDelimiters,cString)-1)
If LnTmpIndex=1
If !empty(LcReturnValue)
arrayName[LnTmpIndex]=LcReturnValue
Endif
Else
arrayName[LnTmpIndex]=LcReturnValue
Endif
cString=STUFF(cString,1,at(cDelimiters,cString)+LnDelLen,'')
LnTmpIndex=LnTmpIndex+1
Enddo
Endfunc