Avatar billede cpccorp Juniormester
13. februar 2005 - 23:55 Der 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
 
  Next
 
  SortArray = arrWork

End Function

Dim arrSorted
Dim i

arrSorted = SortArray(Array("dette", "er", "en", "test", "af", "sortering", "af", "arrays"))

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
Avatar billede eagleeye Praktikant
14. februar 2005 - 00:00 #1
Prøv sådan her:


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
Avatar billede cpccorp Juniormester
14. februar 2005 - 16:54 #2
jeg prøver det lige senere i aften ok??
Avatar billede cpccorp Juniormester
16. februar 2005 - 12:12 #3
Filnavnene er datoer, men de sorteres ikke her er udskriften af sorteringen

10-08-2005
11-11-2004
12-12-2005

Det glemte jeg vist at skrive - det med filnavnene
Avatar billede eagleeye Praktikant
16. februar 2005 - 12:42 #4
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.
Avatar billede cpccorp Juniormester
16. februar 2005 - 18:23 #5
hvor skal det indsætte og det med tal/bogstav-bytteriet er der et fif
Avatar billede eagleeye Praktikant
16. februar 2005 - 19:35 #6
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
Avatar billede cpccorp Juniormester
16. februar 2005 - 19:58 #7
PERFEKT TUSIND TAK
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