Avatar billede w13 Novice
06. september 2006 - 17:16 Der er 6 kommentarer og
1 løsning

Kode til at vise mapper, skal sortere efter sidst oprettet

Hej Eksperter..

Jeg har følgende kode, som viser de 5 senest oprettede mapper på en bestemt sti:
------------------------
<%FileNr = 1

relativSti2 = "/upload/downloads/billed"
strPhysicalPath2 = Server.MapPath(relativSti2)

Set fso = CreateObject("Scripting.FileSystemObject")
set mainfolder=fso.GetFolder(strPhysicalPath2)
Set foldercollection = mainfolder.SubFolders
For Each folder In foldercollection
If FileNr < 6 Then
      Response.Write "<img alt=""Bullet"" src=""/images/bullet1.gif"" border=""0"" width=""11"" height=""11"">" & vbCrLf
      Response.Write "<font size=""2""><a title=""&Aring;bn album i galleriet"" href=""gallery.asp?ShowSub=" & folder.Name & """>" & folder.Name & "</a></font><br><br>" & vbCrLf
FileNr = FileNr + 1
End If
Next

FileNr = ""

Set objFolder = Nothing
Set fso = Nothing%>
------------------------
Men lige nu sorteres de efter navn - de skulle gerne sorteres efter sidst oprettet.. Hvordan gøres dette?

Håber I kan hjælpe mig.
W13
Avatar billede madeindk Nybegynder
06. september 2006 - 17:47 #1
<HTML>
<HEAD>
<TITLE>Bill Wilkinson's sort-it-any-which-way Directory Listing</TITLE>
</HEAD>

<BODY>

<%
' In this demo, at least, we don't allow user to change directories...
' Change the DIRECTORY to point to any virtual directory of your choice.
CONST DIRECTORY = "/upload/downloads/billed" ' 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
CONST FILE_MODIFIED = 5
CONST FILE_ACCESSED = 6

' get requested sort order, if not first time here...
' (forward by name is default)
req = Request("sortBy")
If Len(req) < 1 Then sortBy = 0 Else sortBy = CInt(req)
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

path = Server.MapPath(CONST 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.
'
For Each fileItem in curFiles
    fname = fileItem.Name
    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)
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")
'
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!
'
%>
<FORM Name="doSort" Method="Get">
<INPUT Type=Hidden Name=priorSort Value="<% = priorSort %>">
<INPUT Type=Hidden Name=sortBy Value="-1">
</FORM>

<SCRIPT Language="JavaScript">
function reSort( which )
{
    document.doSort.sortBy.value = which;
    document.doSort.submit( );
}
</SCRIPT>

<CENTER>
<FONT Size="+2">
Showing <% = (fileCount+1) %> files from directory <% = path %>
</FONT>
<P>
Click on a column heading to sort by that column. Click the same column
again to reverse the sort.
<P>
<TABLE Border=1 CellPadding=3>
<TR>
    <TH><A HREF="java script:reSort(0);">File name</A></TH>
    <TH><A HREF="java script:reSort(1);">Extension</A></TH>
    <TH><A HREF="java script:reSort(2);">Type</A></TH>
    <TH><A HREF="java script:reSort(3);">Size</A></TH>
    <TH><A HREF="java script:reSort(4);">Created</A></TH>
    <TH><A HREF="java script:reSort(5);">Last modified</A></TH>
    <TH><A HREF="java script:reSort(6);">Last accessed</A></TH>
</TR>
<%
' With the array nicely sorted, this part is a piece of cake!
For i = 0 To fileCount
    Response.Write "<TR>" & vbNewLine
    For j = 0 To UBound( theFiles(i) )
        Response.Write "    <TD>" & theFiles(i)(j) & "</TD>" & vbNewLine
    Next
    Response.Write "</TR>" & vbNewLine
Next
%>
</TABLE>

</BODY>
</HTML>
Avatar billede madeindk Nybegynder
06. september 2006 - 17:48 #2
Jeg har rettet lidt i scriptet og jeg har fundet det ved en Google-søgning

Link: http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=118
Avatar billede w13 Novice
06. september 2006 - 18:54 #3
Der kode er desværre bare meget lang i forhold til den, jeg har nu. Og tror også, den gør meget mere, end jeg behøver. Er der ikke en nemmere måde at sortere efter dato?
Avatar billede madeindk Nybegynder
07. september 2006 - 21:22 #4
Har rettet en hel del i koden nu - taget det unødvendige ud, håber jeg. Har også selv kommenteret scriptet en del, så du bedre forstår det. Den sorteret pt. sådan at de nye mapper kommer først - det kan dog ændres. Men læs nærmere om det i scriptet.

<%
session.LCID = 1030

strDir = "/" ' Ret til din mappe
req = "4"
sortBy = CInt(req)
priorSort = CInt(req)
reverse = true ' Omvendt sortering (true = nyeste først - false = ældste først)
priorSort = sortBy
strPath = Server.MapPath(strDir) ' Redigeret

Set fso = CreateObject("Scripting.FileSystemObject")
Set theCurrentFolder = fso.GetFolder(strPath)
Set curFiles = theCurrentFolder.SubFolders

Dim theFiles( )
ReDim theFiles( 500 ) ' arbitrary size!
currentSlot = -1 ' start before first slot

For Each fileItem in curFiles
    fname = fileItem.Name
    fext = InStrRev( fname, "." )
    If fext < 1 Then fext = "" Else fext = Mid(fname,fext+1)
    fcreate = fileItem.DateCreated
    currentSlot = currentSlot + 1
    If currentSlot > UBound( theFiles ) Then
        ReDim Preserve theFiles( currentSlot + 99 )
    End If
   
    ' Der SKAL ligge mindst 5 værdier i arrayet - forstår ikke hvorfor - men lad det stå
    theFiles(currentSlot) = Array(fname,fext,ftype,fsize,fcreate)
Next

fileCount = currentSlot
ReDim Preserve theFiles(currentSlot)

If VarType(theFiles(0)(sortBy)) = 8 Then
    If reverse Then kind = 1 Else kind = 2
Else
    If reverse Then kind = 3 Else kind = 4
End If

For i = fileCount TO 0 Step -1
    minmax = theFiles( 0 )( sortBy )
    minmaxSlot = 0
    For j = 1 To i
        Select Case kind
        Case 1
            mark = (strComp( theFiles(j)(sortBy), minmax, vbTextCompare ) < 0)
        Case 2
            mark = (strComp( theFiles(j)(sortBy), minmax, vbTextCompare ) > 0)
        Case 3
            mark = (theFiles( j )( sortBy ) < minmax)
        Case 4
            mark = (theFiles( j )( sortBy ) > minmax)
        End Select

        If mark Then
            minmax = theFiles( j )( sortBy )
            minmaxSlot = j
        End If
    Next

    If minmaxSlot <> i Then
        temp = theFiles( minmaxSlot )
        theFiles( minmaxSlot ) = theFiles( i )
        theFiles( i ) = temp
    End If

Next

For i = 0 To fileCount
   
    For j = 0 To UBound( theFiles(i) )
       
        ' Skal ligge i array - arrayet defineres længere oppe
        response.write(theFiles(i)(j))
   
    Next
   
    response.write("<br>")

Next
%>
Avatar billede w13 Novice
14. oktober 2006 - 14:55 #5
Mange tak =) Hvis du lige opretter et svar, så skal du få point.
Avatar billede w13 Novice
21. november 2006 - 19:34 #6
Pointinteresseret? =)
Avatar billede w13 Novice
11. februar 2007 - 13:37 #7
.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester