|
|
|
DD382200.HTM DD-Software.StringsFiles1 Add this page to your favorites Save this document |
|
|
|
|
udfStrOverlay (sOverlay, sTarget, iStart, iLength, sPadChar) |
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstroverlay",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstroverlay
#DefineFunction udfStrOverlay (sOverlay, sTarget, iStart, iLength, sPadChar)
If !StrLen(sOverlay) Then Return (sTarget)
iTargetLength = StrLen(sTarget)
If !iTargetLength Then Return ("")
If (sPadChar=="") Then sPadChar = " "
iLength = Max(0,iLength)
iStart = Max(0,iStart)
a = StrSub(sTarget,1,iStart-1)
b = StrSub(sTarget,iStart+iLength,-1)
Return (StrSub(StrCat(a,StrFix(sOverlay,sPadChar,iLength),b),1,iTargetLength))
;..........................................................................................................................................
; Returns string sTarget with the string sOverlay overlayed at position iStart.
; Prior to the operation, sOverlay is truncated to iLength
; or padded to iLength with the sPadChar character, which defaults to a blank.
;
; Detlev Dalitz.20020209
;..........................................................................................................................................
#EndFunction
:skip_udfstroverlay
;------------------------------------------------------------------------------------------------------------------------------------------
;--- test ---
sMsgTitle = "Demo udfStrOverlay (sOverlay, sTarget, iStart, iLength, sPadChar)"
:test1
t1 = "dark,edge of night,9,5,*" ; change at end of sTarget ; "edge of dark*"
t2 = "dark,edge of night,1,4,*" ; change at iStart of sTarget ; "dark of night"
t3 = "dark,edge of night,0,5,*" ; no change ; "edge of night"
t4 = "dark,edge of night,20,5,*" ; no change ; "edge of night"
t5 = "dark,edge of night,-3,5,*" ; no change ; "edge of night"
t6 = "dark,edge of night,3,0," ; no change ; "edge of night"
t7 = "dark,edge of night,3,2," ; change ; "edda of night"
t8 = ",edge of night,3,2," ; no change ; "edge of night"
For i=1 To 8
sOverlay = ItemExtract(1,t%i%,",")
sTarget = ItemExtract(2,t%i%,",")
iStart = ItemExtract(3,t%i%,",")
iLength = ItemExtract(4,t%i%,",")
sPadChar = ItemExtract(5,t%i%,",")
sNew = udfStrOverlay(sOverlay,sTarget,iStart,iLength,sPadChar)
sMsgText = ""
sMsgText = StrCat(sMsgText,'sOverlay' ,@TAB,@TAB,'"',sOverlay,'"',@CRLF)
sMsgText = StrCat(sMsgText,'sTarget' ,@TAB,@TAB,'"',sTarget ,'"',@CRLF)
sMsgText = StrCat(sMsgText,'iStart' ,@TAB,@TAB,'"',iStart ,'"',@CRLF)
sMsgText = StrCat(sMsgText,'iLength' ,@TAB,@TAB,'"',iLength ,'"',@CRLF)
sMsgText = StrCat(sMsgText,'sPadChar' ,@TAB,@TAB,'"',sPadChar,'"',@CRLF)
sMsgText = StrCat(sMsgText,'sNew' ,@TAB,@TAB,'"',sNew ,'"',@CRLF)
Pause(sMsgTitle,sMsgText)
Next
:test2
BoxOpen("Demo udfStrOverlay (sOverlay, sTarget, iStart, iLength, sPadChar)","")
iTargetLength = 10
sTarget = StrFill("-",iTargetLength)
For i=1 To iTargetLength
sOut = udfStrOverlay("*",sTarget,i,1,"")
sOut = StrCat("[",sOut,"]")
BoxText(sOut)
TimeDelay(0.1/iTargetLength)
Next
For i=iTargetLength To 1 By -1
sOut = udfStrOverlay("*",sTarget,i,1,"")
sOut = StrCat("[",sOut,"]")
BoxText(sOut)
TimeDelay(0.1/iTargetLength)
Next
BoxShut()
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrCnt (sourcestr, searchstr, matchcase) |
;==========================================================================================================================================
; How to count substrings in a string?
;==========================================================================================================================================
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcnt_1",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcnt_1
#DefineFunction udfStrCnt_1 (sourcestr, searchstr, matchcase)
n=0
pos=0
If Min(1,Max(0,matchcase))
While 1
pos=StrIndex(sourcestr,searchstr,pos+1,@FWDSCAN)
If (pos>0) Then n=n+1
Else Return (n)
EndWhile
Else
While 1
pos=StrIndexNC(sourcestr,searchstr,pos+1,@FWDSCAN)
If (pos>0) Then n=n+1
Else Return (n)
EndWhile
EndIf
;..........................................................................................................................................
; Detlev Dalitz.20020209
;..........................................................................................................................................
#EndFunction
:skip_udfstrcnt_1
;------------------------------------------------------------------------------------------------------------------------------------------
;--- test ---
msgtitle = "Demo udfStrCnt (str, searchstr, matchcase)"
str = "TO test or NOT to test"
searchstr = "O"
n = udfStrCnt_1(str,searchstr,@TRUE)
msgtext = ""
msgtext = StrCat(msgtext,@CRLF,'udfStrCnt("',str,'" ,"',searchstr,'" ,@true)')
msgtext = StrCat(msgtext,@CRLF,n,' occurences of "',searchstr,'"')
Message(msgtitle,msgtext)
; ==> '2 occurences of "O"'
searchstr = "O"
n = udfStrCnt_1(str,searchstr,@FALSE)
msgtext = StrCat(msgtext,@CRLF)
msgtext = StrCat(msgtext,@CRLF,'udfStrCnt("',str,'" ,"',searchstr,'" ,@false)')
msgtext = StrCat(msgtext,@CRLF,n,' occurences of "',searchstr,'"')
Message(msgtitle,msgtext)
; ==> '4 occurences of "O"'
searchstr = "TEST"
n = udfStrCnt_1(str,searchstr,@FALSE)
msgtext = StrCat(msgtext,@CRLF)
msgtext = StrCat(msgtext,@CRLF,'udfStrCnt("',str,'" ,"',searchstr,'" ,@false)')
msgtext = StrCat(msgtext,@CRLF,n,' occurences of "',searchstr,'"')
Message(msgtitle,msgtext)
; ==> '2 occurences of "TEST"'
;==========================================================================================================================================
;==========================================================================================================================================
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcnt_2",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcnt_2
#DefineFunction udfStrCnt_2 (sourcestr, searchstr, matchcase)
If (0==Min(1,Max(0,matchcase)))
sourcestr = StrLower(sourcestr)
searchstr = StrLower(searchstr)
EndIf
Return ((StrLen(sourcestr) - StrLen(StrReplace(sourcestr,searchstr,""))) / StrLen(searchstr))
;..........................................................................................................................................
; Adapted from WinBatch TechBase
; Article ID: W14502
; Filename: Number of Instances of Char in a String.txt
; File Created: 2000:03:30:11:28:01
; Last Updated: 2000:03:30:11:43:44
;
; Slightly modified by Detlev Dalitz.20020521
;..........................................................................................................................................
#EndFunction
:skip_udfstrcnt_2
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
str = "abcannaDnnnannannnDndnnd"
count = udfStrCnt_2(str,"dn",0)
Message("Demo udfStrCnt_2 Count",count)
; ==> 3
count = udfStrCnt_2(str,"dn",1)
Message("Demo udfStrCnt_2 Count",count)
;==> 1
;==========================================================================================================================================
;==========================================================================================================================================
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcnt_3",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcnt_3
#DefineFunction udfStrCnt_3 (sourcestr, searchstr, matchcase)
n=0
pos=0
While 1
If (matchcase==1) Then pos=StrIndex(sourcestr,searchstr,pos+1,@FWDSCAN)
If (matchcase==0) Then pos=StrIndexNC(sourcestr,searchstr,pos+1,@FWDSCAN)
If (pos<>0) Then n=n+1
Else Break
EndWhile
Return (n)
;..........................................................................................................................................
; Published by Guido sedar@yahoo.com, Tuesday, June 26, 2001 09:05 AM, WinBatch Forum
; This function counts the occurrences of a sub-string in a string.
;
; Parameters:
; str: the string to be searched for a sub-string.
; substr: the string to look for within the main string.
; matchcase: 1=Case sensitive, 0=Ignore case
; Returns the Number of occurrences of sub-string found.
;..........................................................................................................................................
#EndFunction
:skip_udfstrcnt_3
;------------------------------------------------------------------------------------------------------------------------------------------
;--- test ---
count1 = udfStrCnt_3("green","e",0)
; ==> 2
count2 = udfStrCnt_3("green","E",1)
; ==> 0
count3 = udfStrCnt_3("green","E",0)
; ==> 2
;==========================================================================================================================================
;==========================================================================================================================================
;------------------------------------------------------------------------------------------------------------------------------------------
:Performancetest
sMsgTitle = "Demo Performance Test"
sTestString = "TO test or NOT to test"
iTestLoop = 1
iMaxTests = 3
iTest=1
Display(1,sMsgTitle,"Running Test %iTest%, please wait ...")
Exclusive(@ON)
iStart = GetTickCount()
For i=1 To iTestLoop
Result = udfStrCnt_1(sTestString,"TEST",0)
Result = udfStrCnt_1(sTestString,"TEST",1)
Result = udfStrCnt_1(sTestString,"O",0)
Result = udfStrCnt_1(sTestString,"O",1)
Next
iStop = GetTickCount()
Exclusive(@OFF)
iTicks%iTest% = iStop-iStart
iTest=2
Display(1,sMsgTitle,"Running Test %iTest%, please wait ...")
Exclusive(@ON)
iStart = GetTickCount()
For i=1 To iTestLoop
Result = udfStrCnt_2(sTestString,"TEST",0)
Result = udfStrCnt_2(sTestString,"TEST",1)
Result = udfStrCnt_2(sTestString,"O",0)
Result = udfStrCnt_2(sTestString,"O",1)
Next
iStop = GetTickCount()
Exclusive(@OFF)
iTicks%iTest% = iStop-iStart
iTest=3
Display(1,sMsgTitle,"Running Test %iTest%, please wait ...")
Exclusive(@ON)
iStart = GetTickCount()
For i=1 To iTestLoop
Result = udfStrCnt_3(sTestString,"TEST",0)
Result = udfStrCnt_3(sTestString,"TEST",1)
Result = udfStrCnt_3(sTestString,"O",0)
Result = udfStrCnt_3(sTestString,"O",1)
Next
iStop = GetTickCount()
Exclusive(@OFF)
iTicks%iTest% = iStop-iStart
iMaxTicks = 0
For iTest=1 To iMaxTests
iMaxTicks = Max(iMaxTicks,iTicks%iTest%)
Next
For iTest=1 To iMaxTests
iPct%iTest% = 100*iTicks%iTest%/iMaxTicks
Next
sMsgText = ""
For iTest=1 To iMaxTests
sMsgText = StrCat(sMsgText,"Test ",iTest,@TAB,"Ticks = ",@TAB,iTicks%iTest%,@TAB,iPct%iTest%," %%",@CRLF)
Next
ClipPut(sMsgText)
Message(sMsgTitle,sMsgText)
; WB Studio Debug
; Test 1 Ticks = 48143 91 %
; Test 2 Ticks = 14571 27 % <== The Winner.
; Test 3 Ticks = 52609 100 %
; WB Studio Run
; Test 1 Ticks = 4923 83 %
; Test 2 Ticks = 2657 45 % <== The Winner.
; Test 3 Ticks = 5877 100 %
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrCompose (str, composelist, delimiter) |
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcompose",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcompose
#DefineFunction udfStrCompose (sString, sComposeList, sDelimiter)
If (sComposeList == "") Then Return (sString)
sErrMsg = "*** udfStrCompose: Bad parameter sComposeList ***"
iCount = ItemCount(sComposeList,sDelimiter)
If (iCount mod 2) Then Return (sErrMsg)
sComposeStr = ""
iCount = iCount/2
For ii=1 To iCount
vItem1 = ItemExtract(ii+ii-1,sComposeList,sDelimiter)
vItem2 = ItemExtract(ii+ii ,sComposeList,sDelimiter)
If !IsInt(vItem2) Then Return (sErrMsg)
If IsInt(vItem1)
iLen = Max(1+vItem2-vItem1,1)
sComposeStr = StrCat(sComposeStr,StrFix(StrSub(sString,vItem1,iLen)," ",iLen))
Else
For id=1 To 3
sDelim = StrSub(""",',`",id,1)
vItem = ItemExtract(2,vItem1,sDelim)
If (StrCat(sDelim,vItem,sDelim) == vItem1)
vItem1 = vItem
Break
EndIf
Next
vItem = vItem1
For in=2 To vItem2
vItem = StrCat(vItem,vItem1)
Next
sComposeStr = StrCat(sComposeStr,vItem)
EndIf
Next
Return (sComposeStr)
;..........................................................................................................................................
; Returns a string which is composed as defined in sComposeList.
; Example:
;
; csDelim = ","
; clist = ""
; clist = Iteminsert(StrCat( ": " ,csDelim, "1" ),-1,clist,csDelim) ; append ': ' times 1
; clist = Iteminsert(StrCat( "#35" ,csDelim, "1" ),-1,clist,csDelim) ; append '#35' times 1
; clist = Iteminsert(StrCat( "'4711'" ,csDelim, "2" ),-1,clist,csDelim) ; append '4711' times 2
; clist = Iteminsert(StrCat( "2" ,csDelim, "5" ),-1,clist,csDelim) ; append column 2 thru 5
; clist = Iteminsert(StrCat( " " ,csDelim, "5" ),-1,clist,csDelim) ; append blank times 5
; clist = Iteminsert(StrCat( "2" ,csDelim, "3" ),-1,clist,csDelim) ; append column 2 thru 3
; clist = Iteminsert(StrCat( "." ,csDelim, "1" ),-1,clist,csDelim) ; append '.' times 1
; clist = Iteminsert(StrCat( "4" ,csDelim, "5" ),-1,clist,csDelim) ; append column 4 thru 5
; clist = Iteminsert(StrCat( "%%" ,csDelim, "1" ),-1,clist,csDelim) ; append symbol percent times 1
; clist = Iteminsert(StrCat( "%@crlf%" ,csDelim, "2" ),-1,clist,csDelim) ; append @crlf times 2
; clist = Iteminsert(StrCat( ";""" ,csDelim, "1" ),-1,clist,csDelim) ; append ';"' times 1
; clist = Iteminsert(StrCat( "%@tab%" ,csDelim, "1" ),-1,clist,csDelim) ; append @tab times 1
; clist = Iteminsert(StrCat( "- . " ,csDelim, "20" ),-1,clist,csDelim) ; append '- . ' times 20
; clist = Iteminsert(StrCat( """" ,csDelim," 1" ),-1,clist,csDelim) ; append '"' times 1
; clist = Iteminsert(StrCat( "%@crlf%" ,csDelim, "1" ),-1,clist,csDelim) ; append @crlf times 1
;
; Composing the tag string looks somewhat cryptic, but don't worry, be happy.
; - Use always sets of two elements: 'from,thru' or 'text,multiplier'.
; - Use tupel (n,m) for extracting chars from sString out of columns n to m.
; - Use tupel (abc,n) to fill new text "abc" n-times into the composed string,
; as an alternative: use tupel ('a b c',n) to fill in new text "a b c" n-times.
;..........................................................................................................................................
; Detlev Dalitz.20010716
;..........................................................................................................................................
#EndFunction
:skip_udfstrcompose
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
:test1
sString = "All messages in all conferences have been marked as read."
sComposeList = "43,46,' --> ',2,5,12, ,2,33,36, ,2,44,44,2,3, ,2,38,41, ,2,38,38,55,56, ,1,<,1,-,5"
sComposeStr = udfStrCompose(sString,sComposeList,",")
sMsgTitle = "Demo udfStrCompose (sString, sComposeList, sDelimiter)"
sMsgText = StrCat('sString = "',sString,'"',@CRLF)
sMsgText = StrCat(sMsgText,'sComposeList = "',sComposeList,'"',@CRLF)
sMsgText = StrCat(sMsgText,'sComposeStr = "',sComposeStr,'"')
Message(sMsgTitle,sMsgText)
; ==> "mark --> --> messages have all been bad <-----"
:test2
sString = "Demo with bad formatted sComposeList."
; sComposeList is not ok: 3 and a half tupel, odd number of items
sComposeList = "1,5,33,34,10,13,."
; sComposeList is ok: 4 tupel, even number of items
; sComposeList = "1,5,33,34,10,13,.,1"
sComposeStr = udfStrCompose(sString,sComposeList,",")
sMsgTitle = "Demo udfStrCompose (sString, sComposeList, sDelimiter)"
sMsgText = StrCat('sString = "',sString,'"',@CRLF)
sMsgText = StrCat(sMsgText,'sComposeList = "',sComposeList,'"',@CRLF)
sMsgText = StrCat(sMsgText,'sComposeStr = "',sComposeStr,'"')
Message(sMsgTitle,sMsgText)
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrQuote (sStr, sLeft, sRight)
|
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrquote",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrquote
#DefineFunction udfStrQuote (sString, sLeft, sRight)
; If (sString == "") then return (sString)
If (""==sLeft)
If (""==sRight)
sQuote = """'`"
sClean = StrClean(sString,sQuote,"",@FALSE,2)
If (""==StrClean(sQuote,sClean,"",@FALSE,1))
sQuote = '"'
sString = StrReplace(sString,sQuote,StrCat(sQuote,sQuote))
Else
sClean = StrClean(sQuote,sClean,"",@FALSE,1)
sQuote = StrSub(sClean,1,1)
EndIf
sLeft = sQuote
sRight = sQuote
EndIf
EndIf
Return (StrCat(sLeft,sString,sRight))
;------------------------------------------------------------------------------------------------------------------------------------------
; With sLeft="" and sRight=""
; the function chooses a winbatch quote delimiter automagically
; and doubles the quotation char in sString if necessary.
;
; With sLeft="""" and sRight=""""
; the function allows quotation without doubling of quotation char in sString.
;
; With sLeft="(* " and sRight=" *)"
; the function encloses sString in pairs of pascal comments.
;
; DD.20010722.20020628
;------------------------------------------------------------------------------------------------------------------------------------------
#EndFunction
:skip_udfstrquote
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrunquote",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrunquote
#DefineFunction udfStrUnQuote (sString, iMode)
If (sString=="") Then Return (sString)
If (iMode<0)||(iMode>5) Then Return (sString)
iLen = StrLen(sString)
c1 = StrSub(sString,1,1)
c2 = StrSub(sString,iLen,1)
cc = StrCat(c1,c2)
qq = """""''``"
bb = "(){}[]<>"
Select iMode
Case 0
dd = qq
Break
Case 1
dd = bb
Break
Case 2
dd = StrCat(qq,bb)
Break
Case 3
dd = StrCat(c1,c1)
Break
Case 4
dd = StrCat(bb,c1,c1)
Break
Case 5
dd = cc
Break
EndSelect
ib = @FALSE
ii = 1
While !(ib||(ii>StrLen(dd)/2))
ib = (""==StrClean(cc,StrSub(dd,ii+ii-1,2),"",@FALSE,1))
ii = ii + 1
EndWhile
If ib Then sString = StrSub(sString,2,iLen-2)
Return (sString)
;..........................................................................................................................................
; This udf removes quote delimiters, brackets or any first/last chars.
;
; iMode=0 ... Removes quotes only.
; iMode=1 ... Removes brackets only.
; iMode=2 ... Removes quotes and brackets.
; iMode=3 ... Removes first/last chars if equal and quotes.
; iMode=4 ... Removes first/last chars if equal and brackets.
; iMode=5 ... Removes any first/last chars.
;..........................................................................................................................................
; Detlev Dalitz.20010722
;..........................................................................................................................................
#EndFunction
;
:skip_udfstrunquote
;------------------------------------------------------------------------------------------------------------------------------------------
;--- test 1 ---
test1 = `udfStrQuote (str, '', '')`
test2 = `udfStrQuote (str, '"', '"')`
test3 = `udfStrQuote (str, '(', ')')`
test4 = `udfStrQuote (str, '/* ',' */')`
test5 = `udfStrQuote (str, '==> ','')`
For it=1 To 5
test = test%it%
str = "."" ab'c ""."
outstr = ""
For i=1 To 4
k = i+i
j = k-1
str%j% = str
str%k% = %test%
str = str%k%
line = StrCat(str%j%,@TAB,@TAB,"-->",@TAB,str%k%)
outstr = StrCat(outstr,line,@CR)
If (StrSub(str,1,1)=="""") Then str=StrReplace(str,"""""","""") ; Simulate quote substitution.
Next
outstr=StrCat(test,@CR,@CR,outstr)
Pause("",outstr)
Next
;--- test 2 ---
mode=2
test=StrCat("udfStrUnQuote (str, ",mode,")")
str="""'`[{<#test#>}]`'"""
steps=10
For i=1 To steps
str2=udfStrUnQuote(str,mode)
outstr=StrCat(str,@TAB,"-->",@TAB,str2)
outstr=StrCat(test,@CR,"step ",steps,"/",i,@CR,@CR,outstr)
Pause("",outstr)
str=str2
Next
;--- test 3 ---
mode=4
test=StrCat("udfStrUnQuote (str, ",mode,")")
str="""'`[{<#test#>}]`'"""
steps=10
For i=1 To steps
str2=udfStrUnQuote(str,mode)
outstr=StrCat(str,@TAB,"-->",@TAB,str2)
outstr=StrCat(test,@CR,"step ",steps,"/",i,@CR,@CR,outstr)
Pause("",outstr)
str=str2
Next
;--- test 4 ---
mode=5
test=StrCat("udfStrUnQuote (str, ",mode,")")
str="""'`[{<#test#>}]`'"""
steps=10
For i=1 To steps
str2=udfStrUnQuote(str,mode)
outstr=StrCat(str,@TAB,"-->",@TAB,str2)
outstr=StrCat(test,@CR,"step ",steps,"/",i,@CR,@CR,outstr)
Pause("",outstr)
str=str2
Next
:CANCEL
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrWildCompare (sPattern, sString, iMatchCase) |
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrwildcompare",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrwildcompare
#DefineFunction udfStrWildCompare (sPattern, sString, iMatchCase)
If (sPattern=="") Then Return (@TRUE) ; Empty wildcard = TRUE.
If (sPattern=="*") Then Return (@TRUE) ; An asterisk "*" matches anything.
If !iMatchCase
sPattern = StrLower(sPattern)
sString = StrLower(sString)
EndIf
While @TRUE
If (sPattern=="") Then Return (sString=="") ; If end of wildcard is also.
sPatChar = StrSub(sPattern,1,1) ; Character of wildcard.
If (sPatChar=="*") ; Is it an asterisk "*"?
sPattern = StrSub(sPattern,2,-1) ; Bump wildcard to next position.
While @TRUE ; See if we can match the rest.
; Recursive udf call.
If (udfStrWildCompare(sPattern,sString,iMatchCase)) Then Return (@TRUE)
If (sString=="") Then Return (@FALSE)
sString = StrSub(sString,2,-1)
EndWhile
EndIf
If (sPatChar=="?") ; A question mark "?" matches any alpha or numeric character.
If (sString=="") Then Return (@FALSE)
sString = StrSub(sString,2,-1)
sPattern = StrSub(sPattern,2,-1)
Continue
EndIf
If (sPatChar=="#") ; A "#" matches any numeric character.
sStrChar = StrSub(sString,1,1)
If (sStrChar>"9") Then Return (@FALSE)
If (sStrChar<"0") Then Return (@FALSE)
sString = StrSub(sString,2,-1)
sPattern = StrSub(sPattern,2,-1)
Continue
EndIf
If (StrSub(sString,1,1)!=sPatChar) Then Return (@FALSE)
sString = StrSub(sString,2,-1)
sPattern = StrSub(sPattern,2,-1)
EndWhile
;..........................................................................................................................................
; This function compares a text string to a wildcard string,
; returning @TRUE if the match is successful.
;
; This matching routine uses the following wildcards:
; * ... Zero or more of any characters at this position.
; ? ... One of any character at this position.
; # ... One numeric character at this position.
;
; iMatchCase = 0 ... Ignore uppercase.
; iMatchCase = 1 ... Respect uppercase.
;..........................................................................................................................................
; Published by Alan Kreutzer
; WinBatch TechDatabase, UserDefinedFunctionLibrary, Wildcard UDF
; Slightly modified by Detlev Dalitz.20020531.20030705.
;..........................................................................................................................................
#EndFunction
:skip_udfstrwildcompare
;------------------------------------------------------------------------------------------------------------------------------------------
;--- test ---
iWildComp1 = udfStrWildCompare("???##/#*","das13/2456",0) ; ==> 1 (@TRUE)
iWildComp2 = udfStrWildCompare("???##/#*","xyz99/8976",0) ; ==> 1 (@TRUE)
iWildComp3 = udfStrWildCompare("???##/#*","dasdas456",0) ; ==> 0 (@FALSE)
iWildComp4 = udfStrWildCompare("dd##/#*" ,"dd45/6",1) ; ==> 1 (@TRUE)
iWildComp5 = udfStrWildCompare("DD##/#*" ,"dd45/6",1) ; ==> 0 (@FALSE)
iWildComp6 = udfStrWildCompare("DD##/#*" ,"dd45/6",0) ; ==> 1 (@TRUE)
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrCount (str, start, stop, searchstr, matchcase) |
;==========================================================================================================================================
; How to count substrings in a substring?
;==========================================================================================================================================
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcount_1",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcount_1
#DefineFunction udfStrCount_1 (str, start, stop, searchstr, matchcase)
n=StrLen(str)
If (n>0)
start=Min(Max(1,start),n)
stop=Max(Min(n,stop),1)
n=((stop-start)>=0)
If n
n=0
p=0
str=StrSub(str,start,stop-start+1)
If !matchcase
str=StrLower(str)
searchstr=StrLower(searchstr)
EndIf
While 1
p=StrIndex(str,searchstr,p+1,@FWDSCAN)
If p Then n=n+1
Else Break
EndWhile
EndIf
EndIf
Return (n)
; Detlev Dalitz.20020209
#EndFunction
:skip_udfstrcount_1
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcount_2",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcount_2
#DefineFunction udfStrCount_2 (str, start, stop, searchstr, matchcase)
n=StrLen(str)
If (n>0)
start=Min(Max(1,start),n)
stop=Max(Min(n,stop),1)
n=((stop-start)>=0)
If n
n=0
p=0
str=StrSub(str,start,stop-start+1)
If matchcase
While 1
p=StrIndex(str,searchstr,p+1,@FWDSCAN)
If p Then n=n+1
Else Return (n)
EndWhile
Else
While 1
p=StrIndexNC(str,searchstr,p+1,@FWDSCAN)
If p Then n=n+1
Else Return (n)
EndWhile
EndIf
EndIf
EndIf
Return (n)
; Detlev Dalitz.20020209
#EndFunction
:skip_udfstrcount_2
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcount_3",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcount_3
#DefineFunction udfStrCount_3 (str, start, stop, searchstr, matchcase)
n=StrLen(str)
If (n>0)
start=Min(Max(1,start),n)
stop=Max(Min(n,stop),1)
n=((stop-start)>=0)
If n
str=StrSub(str,start,stop-start+1)
If !matchcase
str=StrLower(str)
searchstr=StrLower(searchstr)
EndIf
bb=BinaryAlloc(StrLen(str))
BinaryPokeStr(bb,0,str)
n=BinaryStrCnt(bb,0,BinaryEodGet(bb)-1,searchstr)
BinaryFree(bb)
EndIf
EndIf
Return (n)
; Detlev Dalitz.20020209
#EndFunction
:skip_udfstrcount_3
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcount_4",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcount_4
#DefineFunction udfStrCount_4 (str, start, stop, searchstr, matchcase)
n=StrLen(str)
If (n>0)
start=Min(Max(1,start),n)-1
stop=Max(Min(n,stop),1)-1
n=((stop-start)>=0)
If n
If !matchcase
str=StrLower(str)
searchstr=StrLower(searchstr)
EndIf
bb=BinaryAlloc(StrLen(str))
BinaryPokeStr(bb,0,str)
n=BinaryStrCnt(bb,start,stop,searchstr)
BinaryFree(bb)
EndIf
EndIf
Return (n)
; Detlev Dalitz.20020209
#EndFunction
:skip_udfstrcount_4
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcount_5",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcount_5
#DefineFunction udfStrCount_5 (str, start, stop, searchstr, matchcase)
str = StrSub(str,start,stop-start+1)
If str=="" Then Return 0
If searchstr=="" Then Return 0
If !matchcase
str = StrLower(str)
searchstr = StrLower(searchstr)
EndIf
Return ((StrLen(str) - StrLen(StrReplace(str,searchstr,""))) / StrLen(searchstr))
#EndFunction
:skip_udfstrcount_5
;------------------------------------------------------------------------------------------------------------------------------------------
;--- test ---
:test1
Maxtests = 5
str = "TO test or NOT to test"
For t=1 To Maxtests
msgtitle = "Demo udfStrCount_%t% (str, start, stop, searchstr, matchcase)"
start = 4
stop = 10
searchstr = " "
n = udfStrCount_%t% (str,start,stop,searchstr,@FALSE)
msgtext = ""
msgtext = StrCat(msgtext,@CRLF,"udfStrCount(""",str,""",",start,",",stop,",""",searchstr,""",@false",")")
msgtext = StrCat(msgtext,@CRLF,n," occurences of """,searchstr,"""")
Message(msgtitle,msgtext)
; ==> '1 occurences of " "'
start = 1
stop = 40
searchstr = "to te"
n = udfStrCount_%t% (str,start,stop,searchstr,@FALSE)
msgtext = StrCat(msgtext,@CRLF)
msgtext = StrCat(msgtext,@CRLF,"udfStrCount(""",str,""",",start,",",stop,",""",searchstr,""",@false",")")
msgtext = StrCat(msgtext,@CRLF,n," occurences of """,searchstr,"""")
Message(msgtitle,msgtext)
; ==> '2 occurences of "to te"'
searchstr = "to te"
n = udfStrCount_%t% (str,start,stop,searchstr,@TRUE)
msgtext = StrCat(msgtext,@CRLF)
msgtext = StrCat(msgtext,@CRLF,"udfStrCount(""",str,""",",start,",",stop,",""",searchstr,""",@true",")")
msgtext = StrCat(msgtext,@CRLF,n," occurences of """,searchstr,"""")
Message(msgtitle,msgtext)
; ==> '1 occurences of "to te"'
searchstr = "o"
start = 60
stop = -40
n = udfStrCount_%t% (str,start,stop,searchstr,@TRUE)
msgtext = StrCat(msgtext,@CRLF)
msgtext = StrCat(msgtext,@CRLF,"udfStrCount(""",str,""",",start,",",stop,",""",searchstr,""",@true",")")
msgtext = StrCat(msgtext,@CRLF,n," occurences of """,searchstr,"""")
Message(msgtitle,msgtext)
; ==> '0 occurences of "o"'
Next
;------------------------------------------------------------------------------------------------------------------------------------------
:Performancetest
msgtitle = "Demo udfStrCount Performance Test"
TestStr = "TO test or NOT to test TO test or NOT to test TO test or NOT to test TO test or NOT to test"
SearchStr = "to te"
Start = 10
Stop = 30
MatchCase = @FALSE
TestLoop = 200
Maxtests = 5
For t=1 To Maxtests
Display(1,msgtitle,"Running Test %t%, please wait ...")
Exclusive(@ON)
start = GetTickCount()
For i=1 To TestLoop
str = udfStrCount_%t% (TestStr,Start,Stop,SearchStr,MatchCase)
Next
stop = GetTickCount()
Exclusive(@OFF)
Ticks%t% = stop-start
Next
MaxTicks = 0
For t=1 To MaxTests
MaxTicks = Max(MaxTicks,Ticks%t%)
Next
For t=1 To MaxTests
Pct%t% = 100*Ticks%t%/MaxTicks
Next
msgtext = ""
For t=1 To MaxTests
msgtext = StrCat(msgtext,"Test ",t,@TAB,"Ticks = ",@TAB,Ticks%t%,@TAB,Pct%t%," %%",@CRLF)
Next
ClipPut(msgtext)
Message(msgtitle,msgtext)
; WB Studio Debug
; Test 1 Ticks = 22573 96 %
; Test 2 Ticks = 23438 100 %
; Test 3 Ticks = 23372 99 %
; Test 4 Ticks = 21931 93 %
; Test 5 Ticks = 6203 26 % <== The Winner.
; WB Studio Run
; Test 1 Ticks = 2315 59 %
; Test 2 Ticks = 2952 76 %
; Test 3 Ticks = 3877 100 %
; Test 4 Ticks = 3455 89 %
; Test 5 Ticks = 1409 36 % <== The Winner.
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrInsert (sInsert, sTarget, iStart, iLength, sPadChar) |
;----------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrinsert",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrinsert
#DefineFunction udfStrInsert (sInsert, sTarget, iStart, iLength, sPadChar)
If !StrLen(sInsert) Then Return (sTarget)
iTargetLength = StrLen(sTarget)
If !iTargetLength Then Return ("")
If (sPadChar=="") Then sPadChar = " "
iStart = Max(0,iStart)
iLength = Max(0,iLength)
Select 1
Case (iStart>iTargetLength)
sOut = StrCat(sTarget,StrFix(sInsert,sPadChar,iLength))
Break
Case (iStart<1)
sOut = StrCat(StrFix(sInsert,sPadChar,iLength),sTarget)
Break
Case 1
sOut = StrCat(StrSub(sTarget,1,iStart-1),StrFix(sInsert,sPadChar,iLength),StrSub(sTarget,iStart,-1))
Break
EndSelect
Return (sOut)
;..........................................................................................................................................
; Returns the result of inserting string sInsert into string sTarget at position iStart.
; Prior to the insertion, sInsert is truncated to iLength
; or padded to iLength with the sPadChar character, which defaults to a blank.
;..........................................................................................................................................
; Detlev Dalitz.20020616.20020725
;..........................................................................................................................................
#EndFunction
:skip_udfstrinsert
;----------------------------------------------------------------------------------------------------------------------
;--- test ---
sMsgTitle = "Demo udfStrInsert (sInsert, sTarget, iStart, iLength, sPadChar)"
:test1
t1 = "inserting,the result of string,12,10," ; "the result inserting of string"
t2 = "inserting,the result of string,12,12,*" ; "the result inserting***of string"
t3 = "inserting,the result of string,0,6,*" ; "insertthe result of string"
t4 = "inserting,the result of string,40,6,*" ; "the result of stringinsert"
t5 = "inserting,the result of string,-3,6,*" ; "insertthe result of string"
t6 = "inserting,the result of string,5,0," ; "the result of string"
t7 = "inserting,the result of string,15,2," ; "the result of instring"
t8 = ",the result of string,15,2," ; "the result of string"
For i=1 To 8
sOverlay = ItemExtract(1,t%i%,",")
sTarget = ItemExtract(2,t%i%,",")
iStart = ItemExtract(3,t%i%,",")
iLength = ItemExtract(4,t%i%,",")
sPadChar = ItemExtract(5,t%i%,",")
sNew = udfStrInsert(sOverlay,sTarget,iStart,iLength,sPadChar)
sMsgText = ""
sMsgText = StrCat(sMsgText,'sInsert' ,@TAB,@TAB,'"',sOverlay,'"',@CRLF)
sMsgText = StrCat(sMsgText,'sTarget' ,@TAB,@TAB,'"',sTarget ,'"',@CRLF)
sMsgText = StrCat(sMsgText,'iStart' ,@TAB,@TAB,'"',iStart ,'"',@CRLF)
sMsgText = StrCat(sMsgText,'iLength' ,@TAB,@TAB,'"',iLength ,'"',@CRLF)
sMsgText = StrCat(sMsgText,'sPadChar',@TAB,@TAB,'"',sPadChar,'"',@CRLF)
sMsgText = StrCat(sMsgText,'sNew' ,@TAB,@TAB,'"',sNew ,'"',@CRLF)
Message(sMsgTitle,sMsgText)
Next
:test2
BoxOpen("Demo udfStrInsert (sInsert, sTarget, iStart, iLength, sPadChar)","")
iTargetLength = 10
sTarget = StrFill(" ",iTargetLength)
For i=1 To iTargetLength
sOut = udfStrInsert("*",sTarget,i,1,"")
sOut = StrCat("[",StrSub(sOut,1,iTargetLength),"]")
BoxText(sOut)
TimeDelay(0.1/iTargetLength)
Next
For i=iTargetLength To 1 By -1
sOut = udfStrInsert("*",sTarget,i,1,"")
sOut = StrCat("[",StrSub(sOut,1,iTargetLength),"]")
BoxText(sOut)
TimeDelay(0.1/iTargetLength)
Next
BoxShut()
Exit
;----------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrCenter (str, len, pad) |
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcenter",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcenter
#DefineFunction udfStrCenter (sString, iLength, sPad)
sString = StrSub(sString,1,iLength)
Return (StrFix(StrFixLeft(sString,sPad,(StrLen(sString)+iLength)/2),sPad,iLength))
;..........................................................................................................................................
; This function "udfStrCenter" returns a string of iLength width
; with the input string centered and padded with pad character.
;
; Detlev Dalitz.20010729.20030209
;..........................................................................................................................................
#EndFunction
:skip_udfstrcenter
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
test1 = udfStrCenter('title' , 12, "" ) ; ==> ' title '
test2 = udfStrCenter('title' , 12, '*') ; ==> '***title****'
test3 = udfStrCenter('title ', 12, "" ) ; ==> ' title '
test4 = udfStrCenter('title ', 12, '*') ; ==> '**title **'
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfIsUpperCase (sChar)
|
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfisuppercase",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfisuppercase
#DefineFunction udfIsUpperCase (sChar)
Return (sChar==StrUpper(sChar))
#EndFunction
:skip_udfisuppercase
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfislowercase",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfislowercase
#DefineFunction udfIsLowerCase (sChar)
Return (sChar==StrLower(sChar))
#EndFunction
:skip_udfislowercase
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfsaycase",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfsaycase
#DefineFunction udfSayCase (iBool)
Return (ItemExtract(1+iBool,"lowercase,uppercase",","))
#EndFunction
:skip_udfsaycase
;------------------------------------------------------------------------------------------------------------------------------------------
;--- test ---
sUpperChar = "D"
sLowerChar = "d"
UTitle = "Demo udfIsUpperCase"
LTitle = "Demo udfIsLowerCase"
Message(UTitle, StrCat(sUpperChar," is ",udfSayCase( udfIsUpperCase(sUpperChar))))
Message(UTitle, StrCat(sLowerChar," is ",udfSayCase( udfIsUpperCase(sLowerChar))))
Message(LTitle, StrCat(sUpperChar," is ",udfSayCase(!udfIsLowerCase(sUpperChar))))
Message(LTitle, StrCat(sLowerChar," is ",udfSayCase(!udfIsLowerCase(sLowerChar))))
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfIsAbbrev (sStr1, sStr2, iLen) |
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfisabbrev",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfisabbrev
#DefineFunction udfIsAbbrev (sString1, sString2, iLength)
iLength = Max(0,iLength) ; Negative number is forced to zero.
If (iLength == 0) Then Return (StrSub(sString1,1,StrLen(sString2)) == sString2)
If (iLength > StrLen (sString2)) Then Return (@FALSE)
Return (StrSub(sString1,1,iLength) == StrSub(sString2,1,iLength))
;..........................................................................................................................................
; This function "udfIsAbbrev" returns @TRUE if sString2 is an abbreviation of sString1 otherwise @FALSE.
; If iLength==0 then the udf returns @TRUE if sString2 is equal to the first characters in sString1, otherwise @FALSE.
; If iLength is specified, sString2 must be at least length characters long or @FALSE will be returned.
;..........................................................................................................................................
; Detlev Dalitz.20010729
;..........................................................................................................................................
#EndFunction
:skip_udfisabbrev
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrCmpVersion (sString1, sString2, sDelim, iMatchCase) |
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcmpversion",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcmpversion
#DefineFunction udfStrCmpVersion (sString1, sString2, sDelim, iMatchCase)
sPad = "0"
iMatchCase = Min(1,Max(0,iMatchCase))
iCount1 = ItemCount(sString1,sDelim)
iCount2 = ItemCount(sString2,sDelim)
iCountMax = Max(iCount1,iCount2)
iItemLen = 1 + Max((StrLen(sString1)/iCount1),(StrLen(sString2)/iCount2))
sStringCmp1 = ""
sStringCmp2 = ""
For iCount=1 To iCountMax
sStringCmp1 = StrFixLeft(ItemExtract(iCount,sString1,sDelim),sPad,iItemLen)
sStringCmp2 = StrFixLeft(ItemExtract(iCount,sString2,sDelim),sPad,iItemLen)
If iMatchCase
iResult = StrCmp(sStringCmp1,sStringCmp2)
Else
iResult = StriCmp(sStringCmp1,sStringCmp2)
EndIf
If iResult Then Break
Next
Return (iResult)
;..........................................................................................................................................
; This function "udfStrCmpVersion" compares two "version strings".
;
; A "version string" is a string composed by sequences of numbers and/or characters,
; which are delimited, for example, by a single period character, e.g. "1.11.1111" or "2002.abc".
; The given strings are evaluated from left to right.
;
; This udf returns an integer value -1, 0, or 1,
; depending on whether sString1 is less than, equal to, or greater than sString2.
;..........................................................................................................................................
; Detlev Dalitz.20020125.20020817
;..........................................................................................................................................
#EndFunction
:skip_udfstrcmpversion
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
; Test 1: Version1 is less than version2.
sString11 = "9.900.09"
sString12 = "10.40.0101"
; Test 2: Version1 is greater than version2.
sString21 = "10.900"
sString22 = "10.40.0101"
; Test 3: Version1 is equal to version2.
sString31 = "10.900"
sString32 = "10.000900"
; Test 4:
; Version1 is greater than version2 if matchcase is 1 (@TRUE).
; Version1 is equal to version2 if matchcase is 0 (@FALSE).
sString41 = "2002A"
sString42 = "2002a"
; Test 5:
; Version1 is greater than version2.
sString51 = "5.6.0.6626"
sString52 = "5.6.0.1111"
sDelim = "."
iMatchCase = 1
;iMatchCase = 0
sRelationList = "less than,equal to,greater than"
For i=1 To 5
sString1 = sString%i%1
sString2 = sString%i%2
sRelation = ItemExtract(2 + udfStrCmpVersion(sString1,sString2,sDelim,iMatchCase),sRelationList,",")
sMsgText = ""
sMsgText = StrCat(sMsgText,'Test ',i,@CRLF)
sMsgText = StrCat(sMsgText,'Version1 = "',sString1,'"',@CRLF)
sMsgText = StrCat(sMsgText,'Version2 = "',sString2,'"',@CRLF)
sMsgText = StrCat(sMsgText,'Version1 is ',sRelation,' Version2',@CRLF)
Message("Demo udfStrCmpVersion (sString1, sString2, iMatchCase)",sMsgText)
Next
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrTrimLeft (sString)
|
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrtrimleft",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrtrimleft
#DefineFunction udfStrTrimLeft (sString)
If (sString=="") Then Return (sString)
Return (StrSub(sString,StrIndex(sString,StrTrim(sString),0,@FWDSCAN),-1))
; Detlev Dalitz.20020130
#EndFunction
:skip_udfstrtrimleft
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrtrimright",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrtrimright
#DefineFunction udfStrTrimRight (sString)
If (sString=="") Then Return (sString)
sTemp = StrTrim(sString)
Return (StrSub(sString,1,StrIndex(sString,sTemp,0,@FWDSCAN)+StrLen(sTemp)-1))
; Detlev Dalitz.20020130
#EndFunction
:skip_udfstrtrimright
;------------------------------------------------------------------------------------------------------------------------------------------
;--- test ---
sStringIn = " 1 2 3 test %TAB% "
sStringOut = udfStrTrimLeft (sStringIn)
sMsgTitle = "Demo udfStrTrimLeft (str)"
sMsgText = StrCat('StringIn',@TAB,'= "',sStringIn,'"',@CRLF,'StringOut',@TAB,'= "',sStringOut,'"')
Message(sMsgTitle,sMsgText)
sStringOut = udfStrTrimRight (sStringIn)
sMsgTitle = "Demo udfStrTrimRight (str)"
sMsgText = StrCat('StringIn',@TAB,'= "',sStringIn,'"',@CRLF,'StringOut',@TAB,'= "',sStringOut,'"')
Message(sMsgTitle,sMsgText)
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrTrimHead (sString)
|
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrtrimhead",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrtrimhead
#DefineFunction udfStrTrimHead (sString)
sLen=StrLen(sString)
For iPos=1 To sLen
sChar=StrSub(sString,iPos,1)
If sChar==" " Then Continue
If sChar==@TAB Then Continue
Break
Next
Return (StrSub(sString,iPos,-1))
#EndFunction
:skip_udfstrtrimhead
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrtrimtail",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrtrimtail
#DefineFunction udfStrTrimTail (sString)
sLen=StrLen(sString)
For iPos=sLen To 1 By -1
sChar=StrSub(sString,iPos,1)
If sChar==" " Then Continue
If sChar==@TAB Then Continue
Break
Next
Return (StrSub(sString,1,iPos))
#EndFunction
:skip_udfstrtrimtail
;------------------------------------------------------------------------------------------------------------------------------------------
;--- test ---
sStringIn = " 1 2 3 test %@TAB% "
sStringOut = udfStrTrimHead (sStringIn)
sMsgTitle = "Demo udfStrTrimHead (sString)"
sMsgText = StrCat('StringIn',@TAB,'= "',sStringIn,'"',@CRLF,'StringOut',@TAB,'= "',sStringOut,'"')
Message(sMsgTitle,sMsgText)
sStringOut = udfStrTrimTail (sStringIn)
sMsgTitle = "Demo udfStrTrimTail (sString)"
sMsgText = StrCat('StringIn',@TAB,'= "',sStringIn,'"',@CRLF,'StringOut',@TAB,'= "',sStringOut,'"')
Message(sMsgTitle,sMsgText)
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfPathUndecorate (sPathStr) |
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfpathundecorate",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfpathundecorate
#DefineFunction udfPathUndecorate (sPathStr)
iMAX_PATH = 260
hBB = BinaryAlloc(iMAX_PATH)
BinaryPokeStr(hBB,0,sPathStr)
DllCall(StrCat(DirWindows(1),"SHLWAPI.DLL"),long:"PathUndecorateA",lpbinary:hBB)
sPathStr = BinaryPeekStr(hBB,0,iMAX_PATH)
BinaryFree(hBB)
Return (sPathStr)
;..........................................................................................................................................
; This function "udfPathUndecorate" removes the decoration from a path string.
; A decoration consists of a pair of square brackets with one or more digits in between,
; inserted immediately after the base name and before the file name extension.
;
; The following table illustrates how strings are modified by PathUndecorate.
; Initial String Undecorated String
; C:\Path\File[5].txt C:\Path\File.txt
; C:\Path\File[12] C:\Path\File
; C:\Path\File.txt C:\Path\File.txt
; C:\Path\[3].txt C:\Path\[3].txt
;
; Requires minimum Version 5.00 of SHLWAPI.DLL
;
;..........................................................................................................................................
; Detlev Dalitz.20010827
;..........................................................................................................................................
#EndFunction
:skip_udfpathundecorate
;------------------------------------------------------------------------------------------------------------------------------------------
;--- test ---
sPathStr1 = "C:\Path\File[5].txt" ; ==> "C:\Path\File.txt"
sPathStr2 = "C:\Path\File[12]" ; ==> "C:\Path\File"
sPathStr3 = "C:\Path\File.txt" ; ==> "C:\Path\File.txt"
sPathStr4 = "C:\Path\[3].txt" ; ==> "C:\Path\[3].txt"
sPathStr5 = "C:\Path\777[7].File(1)[3].txt" ; ==> "C:\Path\777[7].File(1).txt"
sMsgTitel = "Demo udfPathUndecorate (sPathStr)"
sMsgText = ""
sMsgText = StrCat(sMsgText,sPathStr1,@LF,udfPathUndecorate(sPathStr1),@LF,@LF)
sMsgText = StrCat(sMsgText,sPathStr2,@LF,udfPathUndecorate(sPathStr2),@LF,@LF)
sMsgText = StrCat(sMsgText,sPathStr3,@LF,udfPathUndecorate(sPathStr3),@LF,@LF)
sMsgText = StrCat(sMsgText,sPathStr4,@LF,udfPathUndecorate(sPathStr4),@LF,@LF)
sMsgText = StrCat(sMsgText,sPathStr5,@LF,udfPathUndecorate(sPathStr5),@LF,@LF)
Message(sMsgTitel,sMsgText)
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
How to remove tabs and spaces from a string? |
;------------------------------------------------------------------------------------------------------------------------------------------
; How to remove tabs and spaces from a string.
;------------------------------------------------------------------------------------------------------------------------------------------
; This is a collection of six different algorithms
; including a performancetest.
;------------------------------------------------------------------------------------------------------------------------------------------
; Detlev Dalitz.20020201
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfStrRemoveTabSpace_1 (str)
len = StrLen(str)
OutStr = ""
i = 1
While (i <= len)
While (i < len) && (StrClean(StrSub(str,i,2),StrCat(@TAB," "),"",@FALSE,1) == "")
i = i + 1
EndWhile
OutStr = StrCat(OutStr,StrSub(str,i,1))
i = i + 1
EndWhile
Return (OutStr)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfStrRemoveTabSpace_2 (str)
str = StrReplace(str,@TAB," ")
While @TRUE
lenpre = StrLen(str)
str = StrReplace(str," "," ")
lenpost = StrLen(str)
If (lenpre==lenpost) Then Break
EndWhile
Return (str)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfStrRemoveTabSpace_3 (str)
str = StrReplace(str,@TAB," ")
lenpost = StrLen(str)
lenpre = lenpost + 1
While (lenpre>lenpost)
lenpre = lenpost
str = StrReplace(str," "," ")
lenpost = StrLen(str)
EndWhile
Return (str)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfStrRemoveTabSpace_4 (str)
str = StrClean(str,@TAB," ",@FALSE,1)
While StrIndex(str," ",1,@FWDSCAN)
str = StrReplace(str," "," ")
EndWhile
Return (str)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfStrRemoveTabSpace_5 (str) ; This udf seems to be the fastest.
str = StrReplace(str,@TAB," ")
While StrIndex(str," ",1,@FWDSCAN)
str = StrReplace(str," "," ")
EndWhile
Return (str)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
#DefineFunction udfStrRemoveTabSpace_6 (str)
bb = BinaryAlloc(StrLen(str))
BinaryPokeStr(bb,0,str)
BinaryReplace(bb,@TAB," ",@FALSE)
While (BinaryReplace(bb," "," ",@FALSE) > 1)
EndWhile
str = BinaryPeekStr(bb,0,BinaryEodGet(bb))
BinaryFree(bb)
Return (str)
#EndFunction
;------------------------------------------------------------------------------------------------------------------------------------------
;--- test ---
msgtitle = "Demo udfStrRemoveTabSpace Performance Test"
TestStr = StrCat(@TAB,@TAB,@TAB,@TAB," Hi there. ")
TestLoop = 100
MaxTests = 6
For t=1 To MaxTests
Display(1,msgtitle,"Running Test %t%, please wait ...")
Exclusive(@ON)
start = GetTickCount()
For i=1 To TestLoop
str = udfStrRemoveTabSpace_%t% (TestStr)
Next
stop = GetTickCount()
Exclusive(@ON)
Ticks%t% = stop-start
Next
MaxTicks = 0
For t=1 To MaxTests
MaxTicks = Max(MaxTicks,Ticks%t%)
Next
For t=1 To MaxTests
Pct%t% = 100*Ticks%t%/MaxTicks
Next
msgtext = ""
For t=1 To MaxTests
msgtext = StrCat(msgtext,"Test ",t,@TAB,"Ticks = ",@TAB,Ticks%t%,@TAB,Pct%t%," %%",@CRLF)
Next
ClipPut(msgtext)
Message(msgtitle,msgtext)
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
; WinBatch Studio Debug
; Test 1 Ticks = 73098 100 %
; Test 2 Ticks = 16307 22 %
; Test 3 Ticks = 17598 24 %
; Test 4 Ticks = 9515 13 %
; Test 5 Ticks = 9358 12 % <== The Winner.
; Test 6 Ticks = 9928 13 %
;------------------------------------------------------------------------------------------------------------------------------------------
; WinBatch Studio Run
; Test 1 Ticks = 10586 100 %
; Test 2 Ticks = 1955 18 %
; Test 3 Ticks = 1764 16 %
; Test 4 Ticks = 1324 12 %
; Test 5 Ticks = 1284 12 % <== The Winner.
; Test 6 Ticks = 1684 15 %
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrReverse (sString)
|
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrreverse_1",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrreverse_1
#DefineFunction udfStrReverse_1 (str)
len=StrLen(str)
OutStr=""
For i=len To 1 By -1
OutStr=StrCat(OutStr,StrSub(str,i,1))
Next
Return (OutStr)
;..........................................................................................................................................
; Returns string reversed.
; Backward reading.
; "0123456789" <==> "9876543210"
;..........................................................................................................................................
#EndFunction
:skip_udfstrreverse_1
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrreverse_2",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrreverse_2
#DefineFunction udfStrReverse_2 (str)
len=StrLen(str)
len1=len+1
len2=len/2
bb=BinaryAlloc(len1)
BinaryPokeStr(bb,1,str)
For i=1 To len2
BinaryCopy(bb,0,bb,len1-i,1)
BinaryCopy(bb,len1-i,bb,i,1)
BinaryCopy(bb,i,bb,0,1)
Next
str=BinaryPeekStr(bb,1,len)
BinaryFree(bb)
Return (str)
;..........................................................................................................................................
; Returns string reversed.
; Swapping.
; "0123456789" <==> "9876543210"
;..........................................................................................................................................
#EndFunction
; Etwa 1,5 mal langsamer als udfStrReverse_1 !
:skip_udfstrreverse_2
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrreverse_3",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrreverse_3
#DefineFunction udfStrReverse_3 (str)
len=StrLen(str)
bb=BinaryAlloc(len)
BinaryPokeStr(bb,0,str)
For j=len-1 To 1 By -1
For i=0 To j-1
BinaryPoke(bb,i,BinaryPoke(bb,i+1,BinaryPeek(bb,i)))
Next
Next
str=(BinaryPeekStr(bb,0,len))
BinaryFree(bb)
Return (str)
;..........................................................................................................................................
; Returns string reversed.
; Swapping.
; "0123456789" <==> "9876543210"
;..........................................................................................................................................
#EndFunction
; Etwa 70 mal langsamer als udfStrReverse_1 !!!
:skip_udfstrreverse_3
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrreverse_4",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrreverse_4
#DefineFunction udfStrReverse_4 (str)
len=StrLen(str)
A=ArrDimension(len + 1)
For i=1 To len
A[i]=StrSub(str,i,1)
Next
For j=len To 1 By -1
For i=1 To j-1
A[0]=A[i]
A[i]=A[i+1]
A[i+1]=A[0]
Next
Next
str=""
For i=1 To len
str=StrCat(str,A[i])
Next
Drop (A)
Return (str)
;..........................................................................................................................................
; Returns string reversed.
; Swapping.
; "0123456789" <==> "9876543210"
;..........................................................................................................................................
#EndFunction
; Etwa 50 mal langsamer als udfStrReverse_1 !!
:skip_udfstrreverse_4
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udsstrreverse_5",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udsstrreverse_5
#DefineFunction udfStrReverse_5 (str,i,len)
j = 1 + len - i
If (i < j)
ch = StrSub(str,i,1)
str = StrCat(StrSub(str,1,i-1),StrSub(str,j,1),StrSub(str,i+1,-1))
str = StrCat(StrSub(str,1,j-1),ch,StrSub(str,j+1,-1))
str = udfStrReverse_5 (str,i+1,len)
EndIf
Return (str)
;..........................................................................................................................................
; Returns string reversed.
; Recursive.
; "0123456789" <==> "9876543210"
;..........................................................................................................................................
#EndFunction
;
:skip_udsstrreverse_5
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfisstrpalindrome",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfisstrpalindrome
#DefineFunction udfIsStrPalindrome (sString)
If sString=="" Then Return @FALSE
iStrLen = 1+StrLen(sString)
iMid = iStrLen/2
For i=1 To iMid
If StrSub(sString,i,1)<>StrSub(sString,iStrLen-i,1) Then Return @FALSE
Next
Return @TRUE
;..........................................................................................................................................
; This Function "udfIsPalindrome" returns a boolean value
; which indicates if a given string is a Palindrome or not.
; A Palindrome is a string which can be read either from left to right and from right to left.
; For Example: "madam".
;..........................................................................................................................................
#EndFunction
:skip_udfisstrpalindrome
;------------------------------------------------------------------------------------------------------------------------------------------
;goto test2
; --- test ---
:test1
IsPalindrome1 = udfIsStrPalindrome("madam")
IsPalindrome2 = udfIsStrPalindrome("mad adam")
:test2
; TestStr = "REGEN"
; TestStr = "EINNEGERMITGAZELLEZAGTIMREGENNIE"
; TestStr = "RADAR"
; TestStr = "CIVIC"
; TestStr = "ABBA"
; TestStr = "A man, a plan, a canal, Panama."
; TestStr = "madam"
; TestStr = "Lid off a daffodil"
; TestStr = "Norma is as selfless as I am, Ron"
TestStr = "0123456789"
; str1 = udfStrReverse_1 (TestStr)
; str2 = udfStrReverse_2 (TestStr)
; str3 = udfStrReverse_3 (TestStr)
; str4 = udfStrReverse_4 (TestStr)
str5 = udfStrReverse_5 (TestStr,1,StrLen(TestStr))
:Performancetest
msgtitle = "Demo udfStrReverse (str) Performance Test"
BoxOpen(msgtitle,"")
TestStr = "A man, a plan, a canal, Panama."
TestLoop = 10
:Testloop
MaxTests = 4
For t=1 To MaxTests
BoxText("Running Test %t%, please wait ...")
Exclusive(@ON)
start = GetTickCount()
For i=1 To TestLoop
str = udfStrReverse_%t% (TestStr)
Next
stop = GetTickCount()
Exclusive(@OFF)
Ticks%t% = stop-start
Next
:Test5
MaxTests = 5
t=5
BoxText("Running Test %t%, please wait ...")
Exclusive(@ON)
start = GetTickCount()
For i=1 To TestLoop
str = udfStrReverse_%t% (TestStr,1,StrLen(TestStr))
Next
stop = GetTickCount()
Exclusive(@OFF)
Ticks%t% = stop-start
:Result
MaxTicks = 0
For t=1 To MaxTests
MaxTicks = Max(MaxTicks,Ticks%t%)
Next
For t=1 To MaxTests
Pct%t% = 100*Ticks%t%/MaxTicks
Next
msgtext = ""
For t=1 To MaxTests
msgtext = StrCat(msgtext,"Test ",t,@TAB,"Ticks = ",@TAB,Ticks%t%,@TAB,Pct%t%," %%",@CRLF)
Next
BoxButtonDraw(1,1,"&OK","20,780,980,950")
BoxText(msgtext)
While !BoxButtonStat(1,1)
EndWhile
ClipPut(msgtext)
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
; WinBatch Studio Run
; Test 1 Ticks = 1775 3 % <== The Winner.
; Test 2 Ticks = 2620 4 %
; Test 3 Ticks = 53585 100 %
; Test 4 Ticks = 39225 73 %
; Test 5 Ticks = 4875 9 %
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrCapitalize (str) |
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcap_1",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcap_1
#DefineFunction udfStrCap_1 (str)
len=StrLen(str)
If (len==0) Then Return("")
flag=@TRUE
cap=""
For i=1 To len
ch=StrSub(str,i,1)
If flag
cap=StrCat(cap,StrUpper(ch))
Else
cap=StrCat(cap,ch)
EndIf
flag=(ch==" ")
Next
Return (cap)
#EndFunction
:skip_udfstrcap_1
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
InStr = "To be OR NOT to be" ; "To Be OR NOT To Be"
CapStr = udfStrCap_1 (InStr)
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcap_2",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcap_2
#DefineFunction udfStrCap_2 (str)
len=StrLen(str)
x=1
While 1
While 1
st2=StrSub(str,x,1)
If st2<>" " || x==len Then Break
x=x+1
EndWhile
str=StrCat(StrFixChars(str,"",x-1),StrUpper(st2),StrFixCharsL(str,"",len-x))
While 1
st3=StrSub(str,x,1)
If st3==" " || x==len Then Break
x=x+1
EndWhile
If x==len Then Break
EndWhile
Return str
#EndFunction
:skip_udfstrcap_2
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
InStr = "To be OR NOT to be"
CapStr = udfStrCap_2 (InStr) ; "To Be OR NOT To Be"
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcap_3",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcap_3
#DefineFunction udfStrCap_3 (str)
item_count=ItemCount(str," ")
For i=1 To item_count
item=ItemExtract(i,str," ")
If (item<>"")
first=StrSub(item,1,1)
first=StrUpper(first)
other=StrSub(item,2,-1)
item=StrCat(first,other)
str=ItemReplace(item,i,str," ")
EndIf
Next
Return (str)
#EndFunction
:skip_udfstrcap_3
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
InStr = "To be OR NOT to be"
CapStr = udfStrCap_3 (InStr) ; "To Be OR NOT To Be"
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcap_4",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcap_4
#DefineFunction udfStrCap_4 (sString) ; This algorithm seems to be the fastest.
sStrOut=""
While sString>""
sStrOut=ItemInsert(StrCat(StrUpper(StrSub(ItemExtract(1,sString," "),1,1)),StrSub(StrLower(ItemExtract(1,sString," ")),2,-1)),-1,sStrOut," ")
sString=ItemRemove(1,sString," ")
EndWhile
Return sStrOut
#EndFunction
:skip_udfstrcap_4
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
InStr = "To be OR NOT to be"
CapStr = udfStrCap_4 (InStr) ; "To Be Or Not To Be"
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcap_5",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcap_5
#DefineFunction udfStrCap_5 (str)
pcStr=''
While (str<>'')
item=ItemExtract(1,str,' ')
first=StrSub(item,1,1)
first=StrUpper(first)
other=StrSub(item,2,-1)
other=StrLower(other)
item=StrCat(first,other)
pcStr=ItemInsert(item,-1,pcStr,' ')
str=ItemRemove(1,str,' ')
EndWhile
Return pcStr
#EndFunction
:skip_udfstrcap_5
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
InStr = "To be OR NOT to be"
CapStr = udfStrCap_5 (InStr) ; "To Be Or Not To Be"
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcap_6",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcap_6
#DefineFunction udfStrCap_6 (str)
x=0
len=StrLen(str)
buf=BinaryAlloc(len+100)
BinaryPokeStr(buf,0,str)
y=0
While 1
While 1
st2=BinaryPeekStr(buf,x,1)
st5=BinaryIndexEx(buf,y,@CRLF,@FWDSCAN,0)
If st5<>-1
BinaryPokeStr(buf,st5+2,StrUpper(BinaryPeekStr(buf,st5+2,1)))
y=st5+2
EndIf
If st2<>" " || x==len Then Break
x=x+1
EndWhile
BinaryPokeStr(buf,x,StrUpper(st2))
While 1
st3=BinaryPeekStr(buf,x,1)
If st3==" " || x==len Then Break
x=x+1
EndWhile
If x==len Then Break
EndWhile
str=BinaryPeekStr(buf,0,len)
Return str
#EndFunction
:skip_udfstrcap_6
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
InStr = "To be OR NOT to be"
CapStr = udfStrCap_6 (InStr) ; "To Be OR NOT To Be"
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrcap_7",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrcap_7
#DefineFunction udfStrCap_7 (sString)
iLen = StrLen(sString)
If !iLen Then Return ("")
sOut = StrUpper(StrSub(sString,1,1))
For i=2 To iLen
If StrIndex(" ,.:;-=<>?!/()[]{}",StrSub(sString,i-1,1),1,@FWDSCAN) Then sOut = StrCat(sOut,StrUpper(StrSub(sString,i,1)))
Else sOut = StrCat(sOut,StrSub(sString,i,1))
Next
Return (sOut)
#EndFunction
:skip_udfstrcap_7
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
InStr = "To be OR NOT to be"
CapStr = udfStrCap_7 (InStr) ; "To Be OR NOT To Be"
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udffilecap",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udffilecap
#DefineFunction udfFileCap (InFilename, OutFilename)
fsize=FileSize(InFilename)
If (fsize==0) Then Return ("")
bb=BinaryAlloc(fsize+2)
BinaryPokeStr(bb,0," ") ; Insert one blank character.
BinaryPokeStr(bb,fsize+1," ") ; Append one blank character.
BinaryReadEx(bb,1,InFilename,0,fsize)
BinaryConvert(bb,0,0,0,2) ; Convert to lowercase.
For i=65 To 90 ; "A" to "Z"
ch=Num2Char(i)
str=StrCat(@TAB,ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat(@CR,ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat(@LF,ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat(" ",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat("-",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat("=",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat(",",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat(".",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat(":",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat("?",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat("!",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat("/",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat("(",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat(")",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat("[",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat("]",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat("{",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat("}",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat("'",ch)
BinaryReplace(bb,str,str,@FALSE)
str=StrCat('"',ch)
BinaryReplace(bb,str,str,@FALSE)
Next
BinaryWriteEx(bb,0,OutFilename,0,-1) ; Create new file.
num=BinaryWriteEx(bb,1,OutFilename,0,fsize) ; Discard added blanks.
BinaryFree(bb)
Return (num)
#EndFunction
:skip_udffilecap
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
InFilename = IntControl(1004,0,0,0,0) ; Use this script as test input.
OutFilename = FileCreateTemp("TMP")
num = udfFileCap (InFilename, OutFilename)
RunZoomWait("notepad",OutFilename)
FileDelete(OutFilename)
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
:Performancetest
msgtitle = "Demo udfStrCap (str) Performance Test"
TestStr = StrCat("To be",@TAB,"OR NOT",@TAB,"to be")
TestLoop = 50
MaxTests = 7
For t=1 To MaxTests
Display(1,msgtitle,"Running Test %t%, please wait ...")
Exclusive(@ON)
start = GetTickCount()
For i=1 To TestLoop
str = udfStrCap_%t% (TestStr)
Next
stop = GetTickCount()
Exclusive(@OFF)
Ticks%t% = stop-start
Next
MaxTicks = 0
For t=1 To MaxTests
MaxTicks = Max(MaxTicks,Ticks%t%)
Next
For t=1 To MaxTests
Pct%t% = 100*Ticks%t%/MaxTicks
Next
msgtext = ""
For t=1 To MaxTests
msgtext = StrCat(msgtext,"Test ",t,@TAB,"Ticks = ",@TAB,Ticks%t%,@TAB,Pct%t%," %%",@CRLF)
Next
Message(msgtitle,msgtext)
ClipPut(msgtext)
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
; Test in WinBatch Studio Debug Mode
; Test 1 Ticks = 14082 81 %
; Test 2 Ticks = 13883 80 %
; Test 3 Ticks = 5511 31 %
; Test 4 Ticks = 2828 16 % <== The Winner.
; Test 5 Ticks = 5574 32 %
; Test 6 Ticks = 17323 100 %
; Test 7 Ticks = 9151 52 %
;------------------------------------------------------------------------------------------------------------------------------------------
; Test in WinBatch Studio Run Mode
; Test 1 Ticks = 3529 67 %
; Test 2 Ticks = 3977 76 %
; Test 3 Ticks = 1810 34 %
; Test 4 Ticks = 1164 22 % <== The Winner.
; Test 5 Ticks = 1839 35 %
; Test 6 Ticks = 5218 100 %
; Test 7 Ticks = 3480 66 %
;------------------------------------------------------------------------------------------------------------------------------------------
; Detlev Dalitz.20030210
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrTranslate (sString, sTableOut, sTableIn, sPad) |
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrtranslate_1",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfStrTranslate_1
#DefineFunction udfStrTranslate_1 (sString, sTableOut, sTableIn, sPad) ; speed performance = low = 100 pct.
If (sTableOut=="") Then If (sTableIn=="") Then Return (StrUpper(sString))
If (sPad=="") Then sPad = " "
hBBTable = BinaryAlloc(256)
For i=0 To 255
BinaryPoke(hBBTable,i,i)
Next
iLenString = StrLen(sString)
iLenIn = StrLen(sTableIn)
sTableOut = StrFix(sTableOut,sPad,iLenIn)
iLenOut = StrLen(sTableOut)
For i=1 To iLenIn
BinaryPoke(hBBTable,Char2Num(StrSub(sTableIn,i,1)),Char2Num(StrSub(sTableOut,i,1)))
Next
sOut = ""
For i=1 To iLenString
sOut = StrCat(sOut,Num2Char(BinaryPeek(hBBTable,Char2Num(StrSub(sString,i,1)))))
Next
BinaryFree(hBBTable)
Return (sOut)
; Detlev Dalitz.20020219
#EndFunction
:skip_udfStrTranslate_1
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrtranslate_2",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrtranslate_2
#DefineFunction udfStrTranslate_2 (sString, sTableOut, sTableIn, sPad) ; speed performance = middle = 92..96 pct.
If (sTableOut=="") Then If (sTableIn=="") Then Return (StrUpper(sString))
If (sPad=="") Then sPad = " "
hBBTable = BinaryAlloc(256)
For i=0 To 255
BinaryPoke(hBBTable,i,i)
Next
iLenString = StrLen(sString)
iLenIn = StrLen(sTableIn)
sTableOut = StrFix(sTableOut,sPad,iLenIn)
iLenOut = StrLen(sTableOut)
hBBString = BinaryAlloc(iLenString)
hBBOut = BinaryAlloc(iLenOut)
hBBIn = BinaryAlloc(iLenIn)
BinaryPokeStr(hBBString,0,sString)
BinaryPokeStr(hBBOut,0,sTableOut)
BinaryPokeStr(hBBIn,0,sTableIn)
ilen = iLenIn-1
For i=0 To ilen
BinaryCopy(hBBTable,BinaryPeek(hBBIn,i),hBBOut,i,1)
Next
BinaryXlate(hBBString,hBBTable,0)
sOut = BinaryPeekStr(hBBString,0,iLenString)
BinaryFree(hBBTable)
BinaryFree(hBBString)
BinaryFree(hBBOut)
BinaryFree(hBBIn)
Return (sOut)
; Detlev Dalitz.20020219
#EndFunction
:skip_udfstrtranslate_2
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrtranslate_3",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrtranslate_3
#DefineFunction udfStrTranslate_3 (sString, sTableOut, sTableIn, sPad)
If (sTableOut=="") Then If (sTableIn=="") Then Return (StrUpper(sString))
If (sPad=="") Then sPad = " "
aArray = ArrDimension(256)
For i=0 To 255
aArray[i] = i
Next
iLenString = StrLen(sString)
iLenIn = StrLen(sTableIn)
sTableOut = StrFix(sTableOut,sPad,iLenIn)
iLenOut = StrLen(sTableOut)
For i=1 To iLenIn
aArray[Char2Num(StrSub(sTableIn,i,1))] = Char2Num(StrSub(sTableOut,i,1))
Next
sOut = ""
For i=1 To iLenString
sOut = StrCat(sOut,Num2Char(aArray[Char2Num(StrSub(sString,i,1))]))
Next
Drop(aArray)
Return (sOut)
; Detlev Dalitz.20020219
#EndFunction
:skip_udfstrtranslate_3
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
sMsgTitle = "Demo udfStrTranslate (sString, sTableOut, sTableIn, sPad)"
sMsgText = ""
TestItem = 'udfStrTranslate_3 ("abczyx", "", "", "")'
sMsgText = StrCat(sMsgText,`%TestItem%`,@TAB,' = ',%TestItem%,@LF) ; ABCZYX
TestItem = 'udfStrTranslate_3 ("abzyx!", "1234?", "abcd!","")'
sMsgText = StrCat(sMsgText,`%TestItem%`,@TAB,' = ',%TestItem%,@LF) ; 12zyx?
TestItem = 'udfStrTranslate_3 ("5678/12/34", "mmddyyyy:", "12345678/", "")'
sMsgText = StrCat(sMsgText,`%TestItem%`,@TAB,' = ',%TestItem%,@LF) ; yyyy:mm:dd
TestItem = 'udfStrTranslate_3 ("1.22.333.4", "-", ".0123456789", "?")'
sMsgText = StrCat(sMsgText,`%TestItem%`,@TAB,' = ',%TestItem%,@LF) ; ?-??-???-?
TestItem = 'udfStrTranslate_3 ("1.2.3.4", "-0123456789", ".", "?")'
sMsgText = StrCat(sMsgText,`%TestItem%`,@TAB,' = ',%TestItem%,@LF) ; 1-2-3-4
Message(sMsgTitle,sMsgText)
;------------------------------------------------------------------------------------------------------------------------------------------
:Performancetest
sMsgTitle = "Demo udfStrTranslate (sString, sTableOut, sTableIn, sPad) Performance Test"
; TestItem = '("abcdefg", "", "", "")'
TestItem = '("5678/12/34", "12345678/", "mmddyyyy:", "")'
TestLoop = 10
MaxTests = 3
For t=1 To MaxTests
Display(1,sMsgTitle,"Running Test %t%, please wait ...")
Exclusive(@ON)
start = GetTickCount()
For i=1 To TestLoop
sResult = udfStrTranslate_%t% %TestItem%
Next
stop = GetTickCount()
Exclusive(@OFF)
Ticks%t% = stop-start
Next
MaxTicks = 0
For t=1 To MaxTests
MaxTicks = Max(MaxTicks,Ticks%t%)
Next
For t=1 To MaxTests
Pct%t% = 100*Ticks%t%/MaxTicks
Next
sMsgText = ""
For t=1 To MaxTests
sMsgText = StrCat(sMsgText,"Test ",t,@TAB,"Ticks = ",@TAB,Ticks%t%,@TAB,Pct%t%," %%",@LF)
Next
Message(sMsgTitle,sMsgText)
ClipPut(sMsgText)
; WinBatch Studio Run
;------------------------------------------------------------------------------------------------------------------------------------------
:Test_ROT13
; As an alternative to the function "udfStrROT13 (sString)".
sString = "# ABC -- WinBatch rotates *You* -- XYZ !"
sTableIn = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
sTableOut = 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM'
sPad = ""
sRot = udfStrTranslate_3 (sString, sTableOut, sTableIn, sPad) ; "# NOP -- JvaOngpu ebgngrf *Lbh* -- KLM !"
sRotRot = udfStrTranslate_3 (sRot, sTableOut, sTableIn, sPad) ; "# ABC -- WinBatch rotates *You* -- XYZ !"
sMsgText = StrCat(sString,@LF,sRot,@LF,sRotRot)
Message(sMsgTitle,sMsgText)
;------------------------------------------------------------------------------------------------------------------------------------------
:Test_Remove_Accents
sString = "êñòr Øçÿ íßt ÑËÜ."
sTableIn = "¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ"
sTableOut = "SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy"
sPad = ""
sTrans = udfStrTranslate_3 (sString, sTableOut, sTableIn, sPad) ; "Senor Zz Ocy ist NEU."
sMsgText = StrCat(sString,@LF,sTrans)
Message(sMsgTitle,sMsgText)
;------------------------------------------------------------------------------------------------------------------------------------------
:Test_Lowcase
; As an alternative to the not-yet-existing php function "stritr".
sString = "aBc"
sTableIn = "ABCabc"
sTableOut = "xyzxyz"
sPad = ""
sTrans = udfStrTranslate_3 (sString, sTableOut, sTableIn, sPad) ; "xyz"
sMsgText = StrCat(sString,@LF,sTrans)
Message(sMsgTitle,sMsgText)
;------------------------------------------------------------------------------------------------------------------------------------------
:Test_FormatNumberString
sString = "(abc) defg-hijk"
sTableIn = "abcdefghijk"
sTableOut = "12345678901"
sPad = ""
sTrans = udfStrTranslate_3 (sString, sTableOut, sTableIn, sPad)
sMsgText = StrCat(sString,@LF,sTrans)
Message(sMsgTitle,sMsgText)
;------------------------------------------------------------------------------------------------------------------------------------------
:Soundex
;----------------------------------------------------------
; Soundex und SoundexEx with udfStrTranslate()
;----------------------------------------------------------
Name = "Ashcraft"
Mode = 0 ; 0=normal, 1=extended Soundex.
Tabin = 'WHYEAUIOBFPVCGJKQSXZDTLMNR'
Tabout0 = '00000000111122222222334556'
Tabout1 = '00000000121234435355667889'
Soundex = StrClean(Name,Tabin,"",@FALSE,2)
Soundex = StrUpper(Soundex)
Soundex1 = StrSub(Soundex,1,1)
Soundex = udfStrTranslate_3(Soundex,Tabout%Mode%,Tabin,"")
Soundex = StrSub(Soundex,2,-1)
Soundex = StrCat(Soundex1,Soundex)
Soundex = StrReplace(Soundex,"0","")
i=2
While i<StrLen(Soundex)
Char = StrSub(Soundex,i,1)
Soundex = StrReplace(Soundex,StrCat(Char,Char),Char)
i=i+1
EndWhile
Soundex = StrFix(Soundex,"0",4+Mode)
Message(Name,Soundex)
;------------------------------------------------------------------------------------------------------------------------------------------
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrReplaceNC (sourcestr, oldstr, newstr) |
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrreplacenc_1",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrreplacenc_1
#DefineFunction udfStrReplaceNC_1 (sourcestr, oldstr, newstr)
lenin = StrLen(sourcestr)
lenold = StrLen(oldstr)
lennew = StrLen(newstr)
bbsize = lenin
If (lennew>lenold) Then bbsize = (1+(lenin/lenold))*lennew
bb = BinaryAlloc(bbsize)
BinaryPokeStr(bb,0,sourcestr)
BinaryReplace(bb,oldstr,newstr,@FALSE)
outstr = BinaryPeekStr(bb,0,BinaryEodGet(bb))
BinaryFree(bb)
Return (outstr)
;..........................................................................................................................................
; Adapted from
; Conf: WinBatch
; From: Marty marty+bbs@winbatch.com
; Date: Thursday, May 16, 2002 01:01 PM
;..........................................................................................................................................
; Slighty modified by Detlev Dalitz.20020517
;..........................................................................................................................................
#EndFunction
:skip_udfstrreplacenc_1
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrreplacenc_2",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrreplacenc_2
#DefineFunction udfStrReplaceNC_2 (sourcestr, oldstr, newstr)
lenin = StrLen(sourcestr)
lenold = StrLen(oldstr)
pos = 1
While 1
pos = StrIndexNC(sourcestr,oldstr,pos,@FWDSCAN)
If !pos Then Break
sourcestr = StrCat(StrSub(sourcestr,1,pos-1),newstr,StrSub(sourcestr,pos+lenold,-1))
EndWhile
Return (sourcestr)
;..........................................................................................................................................
; Adapted from
; Conf: WinBatch
; From: billmeek winbatch@tfic.com
; Date: Thursday, May 16, 2002 01:24 PM
;..........................................................................................................................................
; Slighty modified by Detlev Dalitz.20020517
;..........................................................................................................................................
#EndFunction
:skip_udfstrreplacenc_2
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
sourcestr = " Hello Cat the dog said to the cAt"
oldstr = "cat"
newstr = "Sammy"
outstr = udfStrReplaceNC_1 (sourcestr, oldstr, newstr)
Message(sourcestr,outstr)
; ==> "Hello Sammy the dog said to the Sammy"
outstr = udfStrReplaceNC_2 (sourcestr, oldstr, newstr)
Message(sourcestr,outstr)
; ==> " Hello Sammy the dog said to the Sammy"
;------------------------------------------------------------------------------------------------------------------------------------------
:Performancetest
msgtitle = "Demo udfStrReplaceNC Performance Test"
sourcestr = " Hello Cat the dog said to the cAt"
oldstr = "cat"
newstr = "Sammy"
TestLoop = 200
Maxtests = 2
For t=1 To Maxtests
Display(1,msgtitle,"Running Test %t%, please wait ...")
Exclusive(@ON)
start = GetTickCount()
For i=1 To TestLoop
str = udfStrReplaceNC_%t% (sourcestr, oldstr, newstr)
Next
stop = GetTickCount()
Exclusive(@OFF)
Ticks%t% = stop-start
Next
MaxTicks = 0
For t=1 To MaxTests
MaxTicks = Max(MaxTicks,Ticks%t%)
Next
For t=1 To MaxTests
Pct%t% = 100*Ticks%t%/MaxTicks
Next
msgtext = ""
For t=1 To MaxTests
msgtext = StrCat(msgtext,"Test ",t,@TAB,"Ticks = ",@TAB,Ticks%t%,@TAB,Pct%t%," %%",@CRLF)
Next
Message(msgtitle,msgtext)
ClipPut(msgtext)
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
; WinBatch Studio Run
; Test 1 Ticks = 2668 84 % <== The Winner.
; Test 2 Ticks = 3167 100 %
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|
|
|
|
|
udfStrNumThousands (numstr, mode) |
;------------------------------------------------------------------------------------------------------------------------------------------
If ItemLocate("udfstrnumthousands",IntControl(77,103,0,0,0),@TAB) Then Goto skip_udfstrnumthousands
#DefineFunction udfStrNumThousands (numstr, mode)
; #DefineFunction udfStrNumCommaize (numstr, mode)
If (numstr=="") Then Return (numstr)
If mode
point = "," ; European style
sep = "."
Else
point = "." ; American style
sep = ","
EndIf
numstr = StrClean(numstr,StrCat(point,"0123456789"),"",@TRUE,2) ; Allow digits and decimal point.
numle = ItemExtract(1,numstr,point)
numri = ItemExtract(2,numstr,point)
numle = StrSub(numle,StrScan(numle,"123456789",1,@FWDSCAN),-1) ; Delete leading zeroes.
numri = StrSub(numri,1,StrScan(numri,"123456789",StrLen(numri),@BACKSCAN)) ; Delete trailing zeroes.
If (numle == "")
outle = "0"
Else
outle = ""
len = StrLen(numle)
While (len > 3)
outle = ItemInsert(StrSub(numle,len-2,3),0,outle,sep)
numle = StrSub(numle,1,len-3)
len = StrLen(numle)
EndWhile
outle = ItemInsert(numle,0,outle,sep)
EndIf
numout = outle
If (numri == "")
; numri = "0"
Else
outri = ""
len = StrLen(numri)
While (len > 3)
outri = ItemInsert(StrSub(numri,1,3),-1,outri,sep)
numri = StrSub(numri,4,-1)
len = StrLen(numri)
EndWhile
numri = StrFix(numri,"0",3)
outri = ItemInsert(numri,-1,outri,sep)
numout = StrCat(outle,point,outri)
EndIf
Return (numout)
;..........................................................................................................................................
; This function returns a number string formatted in 3-digit packets ("Commaize").
; mode = 0 = American number style = "1,234.567,890"
; mode = 1 = European number style = "1.234,567.890"
;..........................................................................................................................................
; Detlev Dalitz.20020614
;..........................................................................................................................................
#EndFunction
:skip_udfstrnumthousands
;------------------------------------------------------------------------------------------------------------------------------------------
; --- test ---
number1 = "00001234567890000"
str1 = udfStrNumThousands (number1,0)
; ==> "1,234,567,890,000"
number2 = "00001234.567890000"
str2 = udfStrNumThousands (number2,0)
; ==> "1,234.567,890"
number3 = "0000123.4567890000"
str3 = udfStrNumThousands (number3,0)
; ==> "123.456,789"
msgtitle = "Demo udfStrNumThousands(numstr,mode)"
msgtext = ""
msgtext = StrCat(msgtext,number1,@TAB," = ",str1,@CRLF)
msgtext = StrCat(msgtext,number2,@TAB," = ",str2,@CRLF)
msgtext = StrCat(msgtext,number3,@TAB," = ",str3,@CRLF)
Message(msgtitle,msgtext)
Exit
;------------------------------------------------------------------------------------------------------------------------------------------
;*EOF*
|
|
If you have questions about WinBatch, you are encouraged to use online WebBoard BBS at http://webboard.windowware.com
|