Just nu i M3-nätverket
Gå till innehåll

Sortera mappar


Admini

Rekommendera Poster

Hej

Jag använder FileSystemObject för att hämta mappnamn och lista dem i en tabell på asp-sidan.

 

Set FS=Server.CreateObject "Scripting.FileSystemObject")
Set objFolder=FS.GetFolder(Server.MapPath(strPath))

For Each objItem In objFolder.Subfolders

Response.write objItem.Name

Next 

 

Det funkar också men jag vill gärna sortera dem alfabetiskt.

Hur gör jag det?

Tack

 

[inlägget ändrat 2003-03-08 14:20:37 av Admini]

Länk till kommentar
Dela på andra webbplatser

Hos mig verkar det blir rätt, ett exempel:

 

backgrounds

border

buttons

buttons2

div_bar

guestbook

guestbook2

help

help1.5

images

ip-images

iwpb

pictures

preview-bkg

templates

thumbnails

 

Länk till kommentar
Dela på andra webbplatser

OK

Det kan bero på att jag skapar mapparna i efterhand och det verkar som att den sorterar efter skapelsedatum.

 

 

Länk till kommentar
Dela på andra webbplatser

Ok, jag känner tyvärr inte till att det finns några sorterings funktioner i FileSystemObject så du får nog stoppa in dem i en array och sedan leta upp en sorterings funktion på webben.

 

Av någon anledning är det dåligt med sorterings funktioner inbyggt i VbScript.

 

Alternativt använder du JScript där det finns en inbyggd funktion för att sortera arrays.

 

 

Länk till kommentar
Dela på andra webbplatser

Du menar JScript ihop med ASP?

Har du möjligen lösniingen färdig nånstans :)

Har aldrig sysslat med JScript, är det samma sak som Javascript?

 

Tack

 

Länk till kommentar
Dela på andra webbplatser

Måste säga att jag tycker det är rätt märkligt att du inte får dem i alphabetisk ordning, vad har du för språkinställningar ?

 

Testa detta annars:

 

<script language="VBScript" runat="Server">

Dim arr()
Dim i, fs, objFolder

Set fs = Server.CreateObject("Scripting.FileSystemObject")

Set objFolder = FS.GetFolder(Server.MapPath(strPath))

' Dimensionera 
Redim arr(objFolder.SubFolders.Count)

i = 0

' Stoppa in namnen i en array
For Each objItem In objFolder.Subfolders
arr(i) = objItem.Name
i = i + 1
Next

' Sortera och skriv ut
WriteSorted(arr)

Set fs = Nothing
Set objFolder = Nothing

</script>
<script language="JScript" runat="Server">

function WriteSorted(arr)
{
// skapa en jscript array av vbscripts safearray
var tmparr = (new VBArray(arr)).toArray();

// sortera
tmparr.sort();

// skriv ut
for( var i = 0; i < tmparr.length; i++ )
{
	Response.Write( tmparr[i] + "<br>" );
}
}
</script>

 

[inlägget ändrat 2003-03-09 14:07:54 av qwerty99]

Länk till kommentar
Dela på andra webbplatser

Hej

Det funkar med din kod, tack!

Hur kan jag vända på sorteringen, dvs Desc?

Eller kan jag?

 

Det var underligt att asp-koder funkar utan (<%%>)

Hur kommer det sig?

[inlägget ändrat 2003-03-09 22:09:06 av Admini]

Länk till kommentar
Dela på andra webbplatser

I detta fall kan du placera en tmparr.reverse() precis efter tmparr.sort() i WriteSorted funktionen för att få omvänd ordning.

 

Vill man sortera på något annat vis så går det att själv skriva en sorterings funktion och skicka den som argument till sort.

 

Angående script taggarna så är <% och %> bara kortvarianter av <script language="VBScript" runat="Server"></script>

 

Notera attributet runat="Server" som säger åt script motorn att detta är script som ska köras på server sidan.

 

[inlägget ändrat 2003-03-09 23:11:54 av qwerty99]

Länk till kommentar
Dela på andra webbplatser

Hej igen och tack för dina detaljerade förklaringar!

tmparr.reverse() funkar perfekt.

Men jag får en undefined med på köpet också. Det fick jag även innan tmparr.reverse()

Så här ser utskrift ut:

undefined

2003-03-08

2003-03-01

2003-02-15

2003-01-18

2002-12-15

2002-11-27

2002-11-04

2002-07-10

2002-06-05

2002-05-14

2002-05-03

Just det, mina mappar heter olika datum.

 

 

Länk till kommentar
Dela på andra webbplatser

Sorry, i redim ska det se ut så här:

 

Redim arr(objFolder.SubFolders.Count - 1)

 

[inlägget ändrat 2003-03-10 14:00:26 av qwerty99]

Länk till kommentar
Dela på andra webbplatser

Eller som jag löste det

for( var i = 1; i < tmparr.length; i++ )

 

Nu ville jag titta i en underkatalog och ta den allra första filen och visa den, men jag kan inte göra det utan en FOR-loop.

For Each Item In objFiles.Files
Response.Write Item.name
Next

 

Men då visas alla filer

Finns det sätt att ta bara den första utan att loopa igenom alla filer

Tack

 

[inlägget ändrat 2003-03-11 13:00:08 av Admini]

Länk till kommentar
Dela på andra webbplatser

Jag löste det så här:

For Each Item In objFiles.Files
If avbryt = "" Then
Response.Write Item.name
End If
avbryt = "slut"
Next
avbryt = ""

 

Men jag vet inte om det är det bästa sättet, prestandamässigt...

 

[inlägget ändrat 2003-03-11 15:26:41 av Admini]

Länk till kommentar
Dela på andra webbplatser

Files är en collection så man borde kunna ta ut första filen direkt men av någon märklig anledning tycks jag inte kunna få det att fungera.

 

Du kan göra så här:

 

For Each objFile In objFiles.Files
Response.Write objFile.Name
Exit For
Next

 

[inlägget ändrat 2003-03-11 15:47:14 av qwerty99]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...