%@ Language=VBScript %>
![]() |
|||||||||||||||||
|
![]() |
||||||||||||||||
|
<% ' *********************************************** ' the DIRECTORY to point to any virtual directory of your choice. CONST DIRECTORY = "./" ' relative path in virtual directories ' Specify one of these constants for "sortBy"... CONST FILE_NAME = 0 CONST FILE_EXT = 1 CONST FILE_TYPE = 2 CONST FILE_SIZE = 3 CONST FILE_CREATED = 4 ' pjh change CONST FILE_MODIFIED = 1 ' this is 5 if using all these fields CONST FILE_ACCESSED = 6 ' get requested sort order, if not first time here... ' (forward by name is default) 'pjh change - fixed this sort area req = FILE_MODIFIED ' fixed priorSort = FILE_MODIFIED ' fixed 'req = Request("sortBy") 'If Len(req) < 1 Then sortBy = 0 Else sortBy = CInt(req) sortBy = CInt(req) ' fixed 'req = Request("priorSort") 'If Len(req) < 1 Then priorSort = -1 Else priorSort = CInt(req) ' ' did user ask for same sort? to reverse the order? ' but if so, then zap priorSort so clicking again will do forward! If sortBy = priorSort Then reverse = true priorSort = -1 Else reverse = false priorSort = sortBy End If reverse = false 'fixed ' now start the *real* code... ' path = Server.MapPath( DIRECTORY ) Set fso = CreateObject("Scripting.FileSystemObject") Set theCurrentFolder = fso.GetFolder( path ) Set curFiles = theCurrentFolder.Files ' ' And now a loop for the files ' Dim theFiles( ) ReDim theFiles( 500 ) ' arbitrary size! currentSlot = -1 ' start before first slot ' We collect all the info about each file and put it into one ' "slot" in our "theFiles" array. ' PJH - most items are commented out; just hold name and datemodified for sorting by date ' For Each fileItem in curFiles fname = fileItem.Name if instr(fname, "index") = 0 then 'fext = InStrRev( fname, "." ) 'If fext < 1 Then fext = "" Else fext = Mid(fname,fext+1) 'ftype = fileItem.Type 'fsize = fileItem.Size 'fcreate = fileItem.DateCreated fmod = fileItem.DateLastModified 'faccess = fileItem.DateLastAccessed currentSlot = currentSlot + 1 If currentSlot > UBound( theFiles ) Then ReDim Preserve theFiles( currentSlot + 99 ) End If ' note that what we put here is an array! 'theFiles(currentSlot) = Array(fname,fext,ftype,fsize,fcreate,fmod,faccess) theFiles(currentSlot) = Array(fname,fmod) end if Next ' ' files are now in the array... ' ' As noted, it is actually an ARRAY *OF* ARRAYS. Which makes ' picking the column we will sort on easier! ' ' ...size and sort it... fileCount = currentSlot ' actually, count is 1 more, since we start at 0 ReDim Preserve theFiles( currentSlot ) ' really not necessary...just neater! ' First, determine which "kind" of sort we are doing. ' (VarType=8 means "string") ' kind = 3 ' pjh change - fixed 'If VarType( theFiles( 0 )( sortBy ) ) = 8 Then ' If reverse Then kind = 1 Else kind = 2 ' sorting strings... 'Else ' If reverse Then kind = 3 Else kind = 4 ' non-strings (numbers, dates) 'End If ' ' A simple bubble sort for now...easier to follow the code... ' For i = fileCount TO 0 Step -1 minmax = theFiles( 0 )( sortBy ) minmaxSlot = 0 For j = 1 To i Select Case kind ' which kind of sort are we doing? ' after the "is bigger/smaller" test (as appropriate), ' mark will be true if we need to "remember" this slot... Case 1 ' string, reverse...we do case INsensitive! mark = (strComp( theFiles(j)(sortBy), minmax, vbTextCompare ) < 0) Case 2 ' string, forward...we do case INsensitive! mark = (strComp( theFiles(j)(sortBy), minmax, vbTextCompare ) > 0) Case 3 ' non-string, reverse ... mark = (theFiles( j )( sortBy ) < minmax) Case 4 ' non-string, forward ... mark = (theFiles( j )( sortBy ) > minmax) End Select ' so is the current slot bigger/smaller than the remembered one? If mark Then ' yep, so remember this one instead! minmax = theFiles( j )( sortBy ) minmaxSlot = j End If Next ' is the last slot the min (or max), as it should be? If minmaxSlot <> i Then ' nope...so do the needed swap... temp = theFiles( minmaxSlot ) theFiles( minmaxSlot ) = theFiles( i ) theFiles( i ) = temp End If Next ' Ta-da! The array is sorted! ' %>
Mountain States Commercial Credit Management
Phone: 800-457-8244 303-806-5300 Fax: 303-806-5360 e-mail: info@msccm.com 333 W. Hampden, Suite #904, Englewood, Colorado 80110 ©2009 Mountain States Commercial Credit Management, Inc. All rights reserved. Home • About Us • Collections • Submit a Claim |
|||||||||||||||||