WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

List Manipulation

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

Reverse and Numeric Sorts

;***************************************************************************
;**  List manipulation UDF
;**  Craig Storey - cstorey@canada.com
;**  2001/04/11 
;**
;**     ReverseList(list, delimiter) -->  reverse any list 
;**     ReverseSort(list, delimiter) -->  Sort Alphabetically then reverses 
;**  ForwardNumSort(list, delimiter) -->  Sort Numerically 
;**  ReverseNumSort(list, delimiter) -->  Sort Numerically then reverse
;**
;**  For speed numerical sorts are limited to less than 12 digits.  You can 
;**  easily modify the UDF to accomodate any number of digits. Just change the line
;**  --> item=StrFixLeft(item,0,12)
;***************************************************************************
GOSUB DefineUDFs

;; Test ReverseList()

list1="fred feed apple orange zebra"
list2=ReverseList(list1, " ")
Message("ReverseSort()", StrCat("Old list- ", list1, @CRLF, "ReverseList() list- ", list2))


;; Test ReverseSort()

list1="fred feed apple orange zebra"
list2=ReverseSort(list1, " ")
list3=ItemSort(list1, " ")
Message("ReverseSort()", StrCat("Old list- ", list1, @CRLF, "ItemSort() list- ", list3, @CRLF, "ReverseSort() list- ",list2))

;; Test ForwardNumSort()

list1="1 23 43343 11 111 1111 43 12 13"
list3=ForwardNumSort(list1, " ")
Message("ForwardNumSort()", StrCat("Any # list- ", list1, @CRLF, "ForwardNumSort(# list)- ", list3))


;; Test ReverseNumSort()

list1="1 23 43343 11 111 1111 43 12 13"
list2=ReverseNumSort(list1, " ")
Message("ReverseNumSort()", StrCat("Old list- ", list1, @CRLF, "New list- ", list2))

;; Test Delimiters

list1=StrReplace(list1, " ", "|")
list2=ReverseNumSort(list1, "|")
Message("Delimiter = |", StrCat("Old list- ", list1, @CRLF, "New list- ", list2))


;; Compare ReverseSort() and ReverseNumSort()

list1="1 23 43343 11 111 1111 43 12 13"
list2=ReverseNumSort(list1, " ")
list3=ReverseSort(list1, " ")
Message("Compare ReverseSort() and ReverseNumSort()", StrCat("Old list- ", list1, @CRLF, "ReverseSort() list- ",list3, @CRLF, "ReverseNumSort() list- ",list2))

;; Compare ItemSort and ForwardNumSort()

list1="1 23 43343 11 111 1111 43 12 13"
list2=ItemSort(list1, " ")
list3=ForwardNumSort(list1, " ")
Message("Compare ItemSort and ForwardNumSort()", StrCat("Any # list- ", list1, @CRLF, "ItemSort(# list)- ", list2, @CRLF, "ForwardNumSort(# list)- ", list3))


Return

:DefineUDFs
#DefineFunction ReverseList(list, delimiter) 
	revlist=""
	count=ItemCount(list, delimiter)
	For xx=1 to count
		item=ItemExtract(xx,list,delimiter)
		if xx==1 then revlist=item
		else revlist=Strcat(item,delimiter,revlist)
	Next
	Return revlist
#EndFunction

#DefineFunction ReverseSort(list, delimiter) 
	revlist=""
	count=ItemCount(list, delimiter)
	list=ItemSort(list,delimiter)
	For xx=1 to count
		item=ItemExtract(xx,list,delimiter)
		if xx==1 then revlist=item
		else revlist=Strcat(item,delimiter,revlist)
	Next
	Return revlist
#EndFunction


#DefineFunction ReverseNumSort(list, delimiter) 
	count=Itemcount(list, delimiter)
	newlist=""
	For xx=1 to count
		item=ItemExtract(xx,list,delimiter)
	   item=StrFixLeft(item,0,12)
		newlist=StrCat(newlist, item,delimiter)
	Next

	list=ItemSort(newlist,delimiter)

	revlist=""
	For xx=1 to count
		item=ItemExtract(xx,list,delimiter)
		p=StrScan(item,"123456789",0,@fwdscan)
		item=Strsub(item,p,-1)
		if xx==1 then revlist=item
		else revlist=Strcat(item,delimiter,revlist)
	Next

	Return revlist
#EndFunction

#DefineFunction ForwardNumSort(list, delimiter) 
	count=Itemcount(list, delimiter)
	newlist=""
	For xx=1 to count
		item=ItemExtract(xx,list,delimiter)
	   item=StrFixLeft(item,0,12)
		newlist=StrCat(newlist, item,delimiter)
	Next

	list=ItemSort(newlist,delimiter)

	relist=""
	For xx=1 to count
		item=ItemExtract(xx,list,delimiter)
		itemlen=StrLen(item)
		p=StrScan(item,"123456789",0,@fwdscan)
		item=Strsub(item,p,itemlen-p+1)
		if xx==1 then relist=item
		else relist=Strcat(relist,delimiter,item)
	Next
	Return relist
#EndFunction

Return

Article ID:   W15009
File Created: 2001:11:08:12:41:20
Last Updated: 2001:11:08:12:41:20