Avatar billede vagn16 Nybegynder
22. november 2002 - 15:47 Der er 11 kommentarer og
1 løsning

Sorter efter filnavn / skriv filnavn uden extension

Hej!

Jeg benytter FSO til at liste en masse billeder. De hedder 1.jpg, 2.jpg etc. Jeg vil gerne lave en SORT BY file.name - forstår i? Således at den tager 1, 2, 3, 4... og så vil jeg gerne kunne skrive file.name uden at den tager extension med! Så jeg her et billede og nedenunder står der kun 1 og ikke 1.jpg!

Her er det jeg benytter (vist nok en gammel eagleeye ting!):

<%
Set FSO = Server.CreateObject("Scripting.FileSystemObject")
myPath = server.MapPath("/pic/")
Set folder = FSO.GetFolder(myPath)
%>
<table border="0" width="500">

<%
noColPrRow = 0
maxColsPrRow = 4
for each file in folder.files
  indexExt = inStrRev(file.name, ".")
  if indexExt > 0 then
    fileExt = lcase(mid(file.name,indexExt+1))
  else
    fileExt = ""
  end if
 
  if fileExt = "jpg" OR fileExt = "jpeg" OR fileExt = "gif" then
    if noColPrRow = 0 then
      Response.Write "<tr>"
    end if
%> 
  <td><img src="../pic/<%=file.name%>" alt="<%=file.name%>"  width="100"><br><font size="2" face="Verdana"><%=file.name%></font></td>
<%
    noColPrRow = noColPrRow + 1
    if noColPrRow = maxColsPrRow then
      Response.Write "<tr>"
      noColPrRow = 0
    end if
   
  end if
next
%>
Avatar billede medions Nybegynder
22. november 2002 - 15:48 #1
Læg dine resultater over i et Array, og brug Magik's sorting af et Array!

http://www.magik.dk/vis_funktion.asp?id=1

//>Rune
Avatar billede pfp Nybegynder
22. november 2002 - 15:50 #2
Hvis du ved at de alle sammen hedder .jpg eller .gif eller sådan noget kunne du jo evt. trimme de sidste 4 tegn fra dit filnavn og så sortere derefter?

F.eks.

<%
varStr = dsfklsfm.jpg
varStr = Rtrim(varStr,4)
%>
Avatar billede vagn16 Nybegynder
22. november 2002 - 16:09 #3
<% = Rtrim(file.name,4) %

- giver en fejl!

>>medions: jeg kigger lidt på det link du lagde... men jeg må ærligt indrømme at jeg ikke helt kan gennemskue det!

Lidt tilføjelser til "min" kode ville være ridi lækkert...
Avatar billede eagleeye Praktikant
22. november 2002 - 17:41 #4
Du kan ikke bruge FSO til at sortere med men du kan putte filerne i et array som de andre også skriver og her er komplet kode eks :

http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=118
Avatar billede vagn16 Nybegynder
22. november 2002 - 18:02 #5
I har jo fat i noget... og jeg fatter intet!

Jeg har prøvet en del forskellige løsninger og kogt ting sammen jeg fundet...

Se:
<%

Private Sub BubbleSort(byRef arrTemp, byVal sDim, byVal sSort)

' Developer:    Dennis Knappe (dennis@activeserverpages.dk)

    Dim n, y,t,tmpTop, tmpVal, iBookMark, BubbleElement
    BubbleElement = False

    For n = 0 To UBound(arrTemp,2)
        tmpTop = arrTemp(sDim,n)
        iBookmark = n

        For y = n To UBound(arrTemp,2)
            If sSort = 0 Then
                If (tmpTop > arrTemp(sDim,y)) Then
                    BubbleElement = True
                End If
            Else
                If (tmpTop < arrTemp(sDim,y)) Then
                    BubbleElement = True
                End If
            End If

            If BubbleElement Then
                tmpTop = arrTemp(sDim,y)
                iBookmark = y
                BubbleElement = False
            End If
        Next

        For t = 0 to UBound(arrTemp, 1)
            tmpVal = arrTemp(t, n)
            arrTemp(t, n) = arrTemp(t, iBookmark)
            arrTemp(t, iBookmark) = tmpVal
        Next
    Next

End Sub

Function ShowFolderList()

Dim i,tmp
tmp = ""
i = 0
Dim arrFiles(100)

Set FSO = Server.CreateObject("Scripting.FileSystemObject")
myPath = server.MapPath("/beta/links/GSML/")
Set folder = FSO.GetFolder(myPath)
for each file in folder.files
'tmp = tmp & file.name
arrFiles(i) = file.name
i = i + 1
Next

Call BubbleSort(arrFiles, 0, 1)

for q = 0 to i
tmp = tmp & arrFiles(i)
next
ShowFolderList = tmp
End Function

response.write showfolderlist()


%> 

Her får jeg beskeden:

Microsoft VBScript runtime error '800a0009'

Subscript out of range: 'UBound'

/beta/collection1.asp, line 15

??

>>
Avatar billede vagn16 Nybegynder
22. november 2002 - 18:04 #6
>> eagleeye; problemet er at den sorterer mine filer som alle starter med tal således:

1
10
11
12
13
14
2
3
4

istedet for

1
2
3
4
Avatar billede eagleeye Praktikant
22. november 2002 - 18:27 #7
Det er fordi den sortere det som tekst og ikke som tal. Som tekst sammenligner den karakter for karakter og dermed er 10 mindre end 2 for 1 er mindre end 2.
Avatar billede eagleeye Praktikant
22. november 2002 - 18:29 #8
Prøv at rette disse linier:

            If sSort = 0 Then
                If (tmpTop > arrTemp(sDim,y)) Then
                    BubbleElement = True
                End If
            Else
                If (tmpTop < arrTemp(sDim,y)) Then
                    BubbleElement = True
                End If
            End If



Til:

            If sSort = 0 Then
                If (Int(tmpTop) > Int(arrTemp(sDim,y))) Then
                    BubbleElement = True
                End If
            Else
                If (Int(tmpTop) < Int(arrTemp(sDim,y))) Then
                    BubbleElement = True
                End If
            End If



men så skal alle filer være med filnanvet som tal.
Avatar billede vagn16 Nybegynder
25. november 2002 - 10:53 #9
Jeg ved ikke om det er mig der er helt blank?! (det er det jo nok!) Men jeg har sgu prøvet at sætte mig ind i det... testet og testet - men det virker stadig ikke:

<%

Private Sub BubbleSort(byRef arrTemp, byVal sDim, byVal sSort)

' Developer:    Dennis Knappe (dennis@activeserverpages.dk)

    Dim n, y,t,tmpTop, tmpVal, iBookMark, BubbleElement
    BubbleElement = False

    For n = 0 To UBound(arrTemp,2)
        tmpTop = arrTemp(sDim,n)
        iBookmark = n

        For y = n To UBound(arrTemp,2)
            If sSort = 0 Then
                If (Int(tmpTop) > Int(arrTemp(sDim,y))) Then
                    BubbleElement = True
                End If
            Else
                If (Int(tmpTop) < Int(arrTemp(sDim,y))) Then
                    BubbleElement = True
                End If
            End If


            If BubbleElement Then
                tmpTop = arrTemp(sDim,y)
                iBookmark = y
                BubbleElement = False
            End If
        Next

        For t = 0 to UBound(arrTemp, 1)
            tmpVal = arrTemp(t, n)
            arrTemp(t, n) = arrTemp(t, iBookmark)
            arrTemp(t, iBookmark) = tmpVal
        Next
    Next

End Sub

Function ShowFolderList()

Dim i,tmp
tmp = ""
i = 0
Dim arrTemp(100)

Set FSO = Server.CreateObject("Scripting.FileSystemObject")
myPath = server.MapPath("/beta/links/GSML/off/")
Set folder = FSO.GetFolder(myPath)
for each file in folder.files
tmp = tmp & Replace(file.name,"off.jpg","")
arrTemp(i) = Replace(file.name,"off.jpg","")
i = i + 1
Next

Call BubbleSort(arrTemp, 0, 1)

for q = 0 to i
tmp = tmp & arrTemp(i)
next
ShowFolderList = tmp
End Function

response.write showfolderlist()

%>

Giver stadig samme fejl:

Microsoft VBScript runtime error '800a0009'

Subscript out of range: 'UBound'

/beta/collection1.asp, line 14

Anyone?
Avatar billede medions Nybegynder
26. november 2002 - 07:37 #10
<%

Private Sub BubbleSort(byRef arrTemp, byVal sDim, byVal sSort)

' Developer:    Dennis Knappe (dennis@activeserverpages.dk)

    Dim n, y,t,tmpTop, tmpVal, iBookMark, BubbleElement
    BubbleElement = False

    For n = 0 To UBound(arrTemp,2)
        tmpTop = arrTemp(sDim,n)
        iBookmark = n

        For y = n To UBound(arrTemp,2) -1
            If sSort = 0 Then
                If (Int(tmpTop) > Int(arrTemp(sDim,y))) Then
                    BubbleElement = True
                End If
            Else
                If (Int(tmpTop) < Int(arrTemp(sDim,y))) Then
                    BubbleElement = True
                End If
            End If


            If BubbleElement Then
                tmpTop = arrTemp(sDim,y)
                iBookmark = y
                BubbleElement = False
            End If
        Next

        For t = 0 to UBound(arrTemp, 1)
            tmpVal = arrTemp(t, n)
            arrTemp(t, n) = arrTemp(t, iBookmark)
            arrTemp(t, iBookmark) = tmpVal
        Next
    Next

End Sub

Function ShowFolderList()

Dim i,tmp
tmp = ""
i = 0
Dim arrTemp(100)

Set FSO = Server.CreateObject("Scripting.FileSystemObject")
myPath = server.MapPath("/beta/links/GSML/off/")
Set folder = FSO.GetFolder(myPath)
for each file in folder.files
tmp = tmp & Replace(file.name,"off.jpg","")
arrTemp(i) = Replace(file.name,"off.jpg","")
i = i + 1
Next

Call BubbleSort(arrTemp, 0, 1)

for q = 0 to i
tmp = tmp & arrTemp(i)
next
ShowFolderList = tmp
End Function

response.write showfolderlist()

%>

Prøv sådan....

//>Rune
Avatar billede vagn16 Nybegynder
26. november 2002 - 11:14 #11
>> medions: har du selv testet det?? Det virker ikke her; siden vil ikke vises!

Jeg er ligeglad med hvordan løsningen bliver strikket sammen; den behøver ikke tage udgangspunkt i det jeg har postet! Jeg har hævet pointsatsen da det åbenbart ikke er lige til; håber at det kan motivere nogen derude!

Takker!
Avatar billede vagn16 Nybegynder
02. december 2002 - 12:41 #12
Jeg lukker spørsgmålet! Ingen svar der kunne bruges... eller som jeg kunne stykke sammen. Kan til andre sige: JEG FANDT EN LØSNING!

1.jpg omdøbte jeg bare til 01.jpg

Måske lidt palt - WHAT THE HECK - det virker!

Og for at fjerne det overskydende nul: Round(strTal,1)

vagn / 16
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