Avatar billede ugotabe_kidding Nybegynder
15. august 2005 - 15:19 Der er 8 kommentarer

Sortering af filer efter dato

Jeg skal have lavet nedenstående om, så filerne sorteres efter dato i stedet for efter titel. Nogen ideer?

Function ShowFolderList()
      folderspec = Server.MapPath("/download/files/records/"&request.querystring("id")&"/")
      Set fso = Server.CreateObject("Scripting.FileSystemObject")
     
      If fso.FolderExists(folderspec) Then
        Set folder = fso.GetFolder(folderspec)
        Set foldercollection = folder.Files
        If foldercollection.count > 0 Then
          For Each file in foldercollection
            tmp = tmp & "<a href='/download/files/records/"& request.querystring("id")& "/" & file.name & "' target='_blank'>" & file.name & " ("& (file.size/1000) & " kb)"
            tmp = tmp & " - uploaded: " & FormatDateTime(file.DateLastModified,vbShortDate) & "</a><br>"
          Next
          ShowFolderList = tmp
        else
          showfolderlist = "<h4>No files uploaded.</h4>"
        end if
      else
        showfolderlist = "<h4>No files uploaded.</h4>"
      end if
    End Function
    response.write showfolderlist()
Avatar billede busschou Praktikant
15. august 2005 - 15:32 #1
så bliver du vist nød til først at løbe dem alle igennem og putte alle DateLastModified ind i et array som du så sorterer og derefter løber igennem for at skrive ud
Avatar billede ugotabe_kidding Nybegynder
15. august 2005 - 15:33 #2
Array?

Uha, noget forslag til hvordan det kunne se ud?

Mvh
U.K.
Avatar billede busschou Praktikant
15. august 2005 - 15:35 #3
ikke nogen nem løsning nej, jeg har ikke lige en sorterings algoritme ved hånden, afhængig af hvor mange filer det drejer sig om kan man jo selvfølgelig gøre det slavisk
Avatar billede softspot Forsker
15. august 2005 - 21:37 #4
Har du noget imod at skifte over i JScript på serveren til denne opgave, for Array-objektet i JSCript har en sorteringsrutine indbygget som burde kunne klare dette problem i en ruf...
Avatar billede softspot Forsker
16. august 2005 - 00:01 #5
Har lige flikket denne kode sammen (altså JScript) som kalder en sorteringsfunktion. Sorteringsfunktionen er lavet således du kan skifte parameteren ud hvorved du vil sortere, dvs. array'et indeholder file-objekter fra FSO og du kan i princippet benytte alle felter som file-objektet tilbyder som sorteringskriterie. Ydermere er der en sortOrder som angiver hvilke orden der skal sorteres efter (1=stigende og -1=faldende). Prøv det:

<%@ language="JScript" %>
<%
function fnCompare(obj1, obj2) {
    var sortField = "Name";
    var sortOrder = 1;    // 1=stigende, -1=faldende
   
    if(obj1[sortField].toLowerCase() > obj2[sortField].toLowerCase())
        return 1 * sortOrder;
    else if(obj1[sortField].toLowerCase() < obj2[sortField].toLowerCase())
        return -1 * sortOrder;
    else
        return 0;
}

var objFS = Server.CreateObject("Scripting.FileSystemObject");
var objFolder = objFS.GetFolder(Server.MapPath("/"));
var arrFiles = new Array();

var objItr = new Enumerator(objFolder.Files);
for(; !objItr.atEnd(); objItr.moveNext()) {
  arrFiles[arrFiles.length] = objItr.item();
}

arrFiles.sort(fnCompare);

objFolder = null
objFS = null
%>
<html>
  <head>
    <title>serversort</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name=vs_defaultClientScript content="JavaScript">
    <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
  </head>
  <body MS_POSITIONING="GridLayout">
   
    <form id="Form1" method="post" runat="server">
<%
Response.Write("<table>");
for(var idx = 0; idx < arrFiles.length; idx++) {
  Response.Write("<tr><td>" + arrFiles[idx].Name + "</td><td>" + arrFiles[idx].DateLastModified + "</td></tr>");
}
Response.Write("</table>");
%>
    </form>
   
  </body>
</html>
Avatar billede hiks Nybegynder
16. august 2005 - 12:29 #6
Avatar billede softspot Forsker
18. august 2005 - 11:46 #7
Funktionen fnCompare skal naturligvis sortere på et af datofelterne:

function fnCompare(obj1, obj2) {
    var sortField = "DateCreated"; // alternativt: DateLastModified el. DateLastAccessed
    var sortOrder = 1;    // 1=stigende, -1=faldende
   
    if(obj1[sortField].toLowerCase() > obj2[sortField].toLowerCase())
        return 1 * sortOrder;
    else if(obj1[sortField].toLowerCase() < obj2[sortField].toLowerCase())
        return -1 * sortOrder;
    else
        return 0;
}
Avatar billede softspot Forsker
21. august 2005 - 23:48 #8
ugotabe_kidding >> kom du videre med dette eller...?
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