Avatar billede lspn Nybegynder
14. august 2005 - 16:39 Der er 10 kommentarer og
1 løsning

Sortering med FileSystemObject

Hej

Erder nogen der ved hvordan man kan sortere nogle filer så de vises sorteret efter filnavn.
Jeg har fundet følgende kode i BBC Webgallery V2.0:

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder(Server.MapPath(ImageDir))
Set objFiles = objFolder.Files
numberofpictures = objFiles.Count
strScriptName = Request.Servervariables("ScriptName")
intPageCount = -Int(-(numberofpictures/picturesperpage))

Filnavne der findes er  web001.jpg, web002.jpg, osv...
Avatar billede znuggle.com Nybegynder
14. august 2005 - 18:51 #1
Dette burde klare det :-)

<%
Set objFS = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder(Server.MapPath(ImageDir))

For Each File In objFolder.Files
  Response.Write(File.Name & "<br>")
Next

Set objFolder = Nothing
Set objFS = Nothing
%>
Avatar billede lspn Nybegynder
15. august 2005 - 16:55 #2
Det virker desværre ikke.
resultatet: web058.jpg, web031.jpg, web032.jpg, web033.jpg, web034.jpg, web035.jpg, web057.jpg, web039.jpg, web060.jpg, web042.jpg, web061.jpg, web045.jpg, web046.jpg.
Er der andre måder man kan klare det med? eller skal jeg lægge filnavnene i en tabel?
Avatar billede softspot Forsker
15. august 2005 - 20:43 #3
Hvis du ikke har noget imod at skifte over i JScript på serveren for en kort bemærkning, så findes der en sort-rutine indbygget i array-objektet. Så kan du gøre således:

<%@ language="JScript" %>
<%
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()) {
  var File = objItr.item();
  if(arrFiles.length == 0)
    arrFiles[0] = File.Name;
  else
    arrFiles[arrFiles.length] = File.Name;
  Response.Write(File.Name + ".<br>");
}

arrFiles.sort();

objFolder = null
objFS = null

for(var idx = 0; idx < arrFiles.length; idx++) {
  Response.Write(arrFiles[idx] + "<br>");
}
%>
Avatar billede softspot Forsker
15. august 2005 - 20:47 #4
Der er godt nok forskel på store og små bogstaver, men hvis det ikke betyder noget, så kan man konvertere alle filnavne til lowercase inden de lægges ind i array'et...
Avatar billede softspot Forsker
15. august 2005 - 20:49 #5
Hvis data skal sorteres i den modsatte retning kan man efter sortering kalde reverse() på array-objektet. Hvis man er rigtig controlfreak, så kan man lave sin egen funktion til at beslutte hvordan data skal sorteres. Denne funktion skal så bare sendes med til sort-kaldet...
Avatar billede softspot Forsker
15. august 2005 - 20:51 #6
Hmm... min kode kan vist forkortes til:

<%@ language="JScript" %>
<%
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()) {
  var File = objItr.item();
  arrFiles[arrFiles.length] = File.Name.toLowerCase();
}

arrFiles.sort();

objFolder = null
objFS = null

for(var idx = 0; idx < arrFiles.length; idx++) {
  Response.Write(arrFiles[idx] + "<br>");
}
%>
Avatar billede lspn Nybegynder
16. august 2005 - 21:00 #7
Mappen med filer ligger på ****.dk/ImageDir/
internet siden ligger på ****.dk/test/

Det er nok simpelt for jer andre men hvordan får jeg den til at kigge i den rigtige mappe?
Avatar billede softspot Forsker
16. august 2005 - 21:28 #8
Hvis din server tillader parent paths så kan du benytte flg. kode:

<%@ language="JScript" %>
<%
var objFS = Server.CreateObject("Scripting.FileSystemObject");
var objFolder = objFS.GetFolder(Server.MapPath("/../ImageDir"));
var arrFiles = new Array();

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

arrFiles.sort();

objFolder = null
objFS = null

for(var idx = 0; idx < arrFiles.length; idx++) {
  Response.Write(arrFiles[idx] + "<br>");
}
%>
Avatar billede lspn Nybegynder
17. august 2005 - 16:03 #9
ImageDir = "/ImageDir/"
var objFolder = objFS.GetFolder(Server.MapPath(ImageDir));

Med denne lille ændring kom det til at virke.
Tak for hjælpen softspot, smider du et svar?
Nu skal jeg bare have alt det andet til at virke
Kan ikke man skifte programerings sprog nede midt i en side?
Avatar billede softspot Forsker
17. august 2005 - 19:38 #10
Årh ja, klart test var jo bare en virtual folder og ikke webserverens rod... :)

Du kan godt have to sprog på samme side, så skal du lave dine scriptsektioner med script-tags med runat="server" attributten - á la:

<script language="JScript" runat="server">
...
</script>
<script language="VBScript" runat="server">
...
</script>

Det er bare en resursemæssig dyr måde at køre webserver på, da webserveren så skal have begge fortolkere op i hukommelsen på een gang, men hvis det bruges med omtankte kan det nok gå i snæver vending... :)
Avatar billede softspot Forsker
17. august 2005 - 22:09 #11
Tak for point :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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