13. februar 2005 - 23:55Der er
6 kommentarer og 1 løsning
Lave en array fra filliste
Jeg har følgende script <% Function SortArray(ByVal arrToSort)
Dim arrWork Dim intOuterIndex, intInnerIndex, intSmallestIndex Dim varTemp
arrWork = arrToSort
For intOuterIndex = 0 To UBound(arrWork)
intSmallestIndex = intOuterIndex
For intInnerIndex = intOuterIndex To UBound(arrWork) If arrWork(intInnerIndex) < arrWork(intSmallestIndex) Then intSmallestIndex = intInnerIndex End If Next
If intSmallestIndex <> intOuterIndex Then varTemp = arrWork(intOuterIndex) arrWork(intOuterIndex) = arrWork(intSmallestIndex) arrWork(intSmallestIndex) = varTemp End If
For i = 0 To UBound(arrSorted) Response.Write(arrSorted(i) & "<br>") Next RootDir = Replace(Request.ServerVariables("Script_Name"),"/" & ScriptName,"") MyDirectory = Server.MapPath("updates/") Const cFOL = "updates/" Dim objFSO Set objFSO = Server.CreateObject("Scripting.FileSystemObject") Dim objGFO Set objGFO = objFSO.GetFolder(Server.MapPath(cFOL)) Response.Write(objGFO.Files.Count) & " opdateringer<br>" Set objGFO = Nothing Set objFSO = Nothing
Set FSOdir = Server.CreateObject("Scripting.FileSystemObject") Set MyDir = FSODir.GetFolder (MyDirectory) Set FileNms = Mydir.Files For Each FNms In FileNms newfullPath = FNms MyString = Replace(newfullpath, "\", "/") temp = Mid( MyString, InStrRev( MyString, "/" ) + 1 ) temp = left(temp, len(temp)-4) '''''''''''HER SKULLE ARRAYET GERNE GENERERES Next arrSorted = SortArray(Array("dette", "er", "en", "test", "af", "sortering", "af", "arrays"))
For i = 0 To UBound(arrSorted) Response.Write(arrSorted(i) & "<br>") Next
%>
Der er et array men jeg skal have lavet det sådant at arrayet bliver genereret ud fra scriptet ovenover med fillisten
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
For Each FNms In FileNms newfullPath = FNms MyString = Replace(newfullpath, "\", "/") temp = Mid( MyString, InStrRev( MyString, "/" ) + 1 ) temp = left(temp, len(temp)-4) 'Her laves en komma sepereret streng med filnanve, jeg antager der er variablen temp der indeholder filnavnet. strFiles = strFiles & "," & temp Next strFiles = Mid(strFiles,2) 'Fjern første komma
arrSorted = SortArray(Split(strFiles,","))
For i = 0 To UBound(arrSorted) Response.Write(arrSorted(i) & "<br>") Next
Jo de sorters fint. De er sortere alfabetisk, hvis du ikke bygger det ind i din sort routine så ved den jo ikke at du vil sortere hele strengen som en dato :)
hvis du skifter 0->A og 1->B osv. så du ikke i tvivl om den har sortere dem rigtigt: BA-AI-CAAF BB-BB-CAAE BC-BC-CAAF
Har du kun datoer i filnanvet eller kan der også være tekst det fordi hvis man sætter CDate omkring så vil den fejle hvis der er bogstaver.
Du kan rette denne for som tjekker til at tjekke om filnavnet er en dato:
For intInnerIndex = intOuterIndex To UBound(arrWork) If arrWork(intInnerIndex) < arrWork(intSmallestIndex) Then intSmallestIndex = intInnerIndex End If Next
Til dette:
For intInnerIndex = intOuterIndex To UBound(arrWork) If isDate(arrWork(intInnerIndex)) and isDate(arrWork(intSmallestIndex)) Then If Cdate(arrWork(intInnerIndex)) < Cdate(arrWork(intSmallestIndex)) Then intSmallestIndex = intInnerIndex End If ElseIf arrWork(intInnerIndex) < arrWork(intSmallestIndex) Then intSmallestIndex = intInnerIndex End If Next
Men som det er lige ny forudsætter at der ikke er et efternavn på filennavnet 10-11-2005.XXX så vil den statig sortere det alfabetisk.
Det var som bare et eksemple på at den sortere filerne efter navn. Tal indgår også i alfabetet på en computer. "10" er mindre end "11" så derfor står "10-08-2005" før "11-11-2004".
Du skal havde din funtion som sortere SortArray til at kunne genkende filnavnet som en dato og ikke en tekst streng så derfor prøv at rette disse linjer i funktionen:
For intInnerIndex = intOuterIndex To UBound(arrWork) If arrWork(intInnerIndex) < arrWork(intSmallestIndex) Then intSmallestIndex = intInnerIndex End If Next
Til detet:
For intInnerIndex = intOuterIndex To UBound(arrWork) If isDate(arrWork(intInnerIndex)) and isDate(arrWork(intSmallestIndex)) Then If Cdate(arrWork(intInnerIndex)) < Cdate(arrWork(intSmallestIndex)) Then intSmallestIndex = intInnerIndex End If ElseIf arrWork(intInnerIndex) < arrWork(intSmallestIndex) Then intSmallestIndex = intInnerIndex End If Next
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.