Avatar billede para7 Nybegynder
25. marts 2004 - 19:35 Der er 14 kommentarer og
1 løsning

Bubblesort på dato fejler

Jeg har leget med nedenstående lappeløsning for at forsøge at sortere på filer i en mappe. Det går fint med sortering på .Name, men ikke på .DateLastModified, der er ingen orden i datoerne. Kan nogen smide nogle vise sten her ?

<html>
<head>
<title>Filsystem test for dato/navn sortering</title>
</head>
<body>
<%

strPhysicalPath = Server.MapPath("testbilleder")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strPhysicalPath)
Set objFolderContents = objFolder.Files
For Each objFileItem in objFolderContents
    fileList = fileList & objFileItem.DateLastModified & ","
Next
Set objFSO = Nothing

arrFileList = split(fileList,",")

Sub BubbleSort(arrBubbleSort)
    changed = true
  do while changed
    changed = false
    for i = 1 to ubound(arrBubbleSort)
      if arrBubbleSort(i-1) > arrBubbleSort(i) then
        tmp = arrBubbleSort(i-1)
        arrBubbleSort(i-1) = arrBubbleSort(i)
        arrBubbleSort(i) = tmp
        changed = true
      end if
    next
  loop
End Sub

BubbleSort arrFileList

for each element in arrFileList
    response.write element & "<br>"
next
       
%>
</body>
</html>
Avatar billede eagleeye Praktikant
25. marts 2004 - 19:41 #1
Prøv at sætte CDate omkring sådan den sammenliger dem som datoer:
      if arrBubbleSort(i-1) > arrBubbleSort(i) then

Sådan her:
      if CDate(arrBubbleSort(i-1)) > CDate(arrBubbleSort(i)) then
Avatar billede para7 Nybegynder
25. marts 2004 - 20:03 #2
Tak, men den gik ikke:

Sub BubbleSort(arrBubbleSort)
    changed = true
  do while changed
    changed = false
    for i = 1 to ubound(arrBubbleSort)
      if CDate(arrBubbleSort(i-1)) > CDate(arrBubbleSort(i)) then
        tmp = arrBubbleSort(i-1)
        arrBubbleSort(i-1) = arrBubbleSort(i)
        arrBubbleSort(i) = tmp
        changed = true
      end if
    next
  loop
End Sub

...
Typer stemmer ikke overens: 'CDate'
Avatar billede eagleeye Praktikant
25. marts 2004 - 20:06 #3
Det kunne tyde på det fordi det er en celle mere i arrayet som er tom. Det passer vist meget godt ud fra dette:

For Each objFileItem in objFolderContents
    fileList = fileList & objFileItem.DateLastModified & ","
Next
Set objFSO = Nothing

arrFileList = split(fileList,",")


Prøv at rette det til:

For Each objFileItem in objFolderContents
    fileList = fileList & "," & objFileItem.DateLastModified
Next
Set objFSO = Nothing

fileList = Mid(fileList,2) 'Fjern ekstra ,
arrFileList = split(fileList,",")
Avatar billede para7 Nybegynder
26. marts 2004 - 19:24 #4
Nej, det er stadig samme fejl..
Avatar billede para7 Nybegynder
26. marts 2004 - 19:29 #5
Det jeg får udskrevet uden Cdate er:
02-12-2002 15:18:00
06-08-2002 08:09:42
11-02-2003 22:14:17
12-08-1999 19:43:14
13-02-2003 19:40:00
15-07-2000 19:44:20
15-11-2002 20:16:32
15-11-2002 20:16:39
20-12-2002          [her er der fundet en .gif fil]
21-02-1999 21:28:34
21-03-2004 19:25:15
21-08-1998 19:42:40
22-01-2003 11:15:11
22-01-2003 11:19:05
22-08-2002 18:07:52
22-08-2002 18:07:53
22-08-2002 18:07:53
24-03-2004 19:53:56
26-01-2003 22:37:29
28-01-2003 12:41:52
31-12-2002 10:47:36
31-12-2002 10:48:25
31-12-2002 10:49:14
Avatar billede eagleeye Praktikant
26. marts 2004 - 19:46 #6
Står der:  [her er der fundet en .gif fil]
i arrayet samme med datoen?
Avatar billede para7 Nybegynder
26. marts 2004 - 19:59 #7
Men med det her har jeg fjernet kommaet og det virker:

For Each objFileItem in objFolderContents
    fileList0 = fileList0 & objFileItem.DateLastModified & ","
Next
Set objFSO = Nothing

fileList = left(fileList0,len(fileList0)-1)
arrFileList = split(fileList,",")
Avatar billede eagleeye Praktikant
26. marts 2004 - 20:01 #8
:) jamen det jo det samme som jeg har vist 25/03-2004 20:06:59. Du fjerne bare det bare fra sluningen og mit fra starten af strengen..
Avatar billede para7 Nybegynder
26. marts 2004 - 20:05 #9
Tak eagleeye, det var jo bare slutkommaet der drillede.
Nu mangler jeg bare at lave min sub til en funktion, der kan håndtere navn og dato. Måske du har et råd her til sidst om det. Ellers tak for nu...
Avatar billede para7 Nybegynder
26. marts 2004 - 20:07 #10
Hov jeg så ikke din kommentar før nu. Den forstår jeg ikke helt. Men er det ikke kommaet du mener, som jeg nu har fjernet?
Avatar billede eagleeye Praktikant
26. marts 2004 - 20:07 #11
Ja problemet er at CDate(filnavn) vil give en fejl.
det man kan gøre er at bruge isDate og tjekke om det er en dato og så lade det afgøre om man skal tjekke de to med cdate omkring:

if isDate(arrBubbleSort(i-1)) and isDate(arrBubbleSort(i)) then
  if CDate(arrBubbleSort(i-1)) > CDate(arrBubbleSort(i)) then
else
  if arrBubbleSort(i-1) > arrBubbleSort(i) then
end if
Avatar billede eagleeye Praktikant
26. marts 2004 - 20:09 #12
min kommentar: 26/03-2004 20:01:33
Det kode du har vist 26/03-2004 19:59:41 er i princippet det samme som det jeg forslog 25/03-2004 20:06:59. Forskellen er at du sætter , efter datoen og fjerner det sidste komma. Det jeg har vist sætte komme før datoen og fjerner det første komma. Så de to stykker kode skulle give det samme :)
Avatar billede para7 Nybegynder
26. marts 2004 - 20:10 #13
PS:
Står der:  [her er der fundet en .gif fil]
i arrayet samme med datoen?
Det var bare min indsatte kommentar..
Avatar billede para7 Nybegynder
26. marts 2004 - 20:14 #14
OK, det er nok lidt smartere at sætte det ind først, så kan man bruge mid. Og det har jeg nu gjort:

For Each objFileItem in objFolderContents
    fileList0 = fileList0 & "," & objFileItem.DateLastModified
Next
Set objFSO = Nothing

fileList = mid(fileList0,2)
arrFileList = split(fileList,",")
Avatar billede para7 Nybegynder
26. marts 2004 - 20:16 #15
Simple is the best ;-)
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