Antingen så döper du dom till nummer och slumpar mellan numren.
Eller så listar du dom på serven och efter ett visst slumpat tal av filer som listats på serven så vísar du den
25 svar · 841 visningar · startad av Asa
Vill slumpa fram en bild som finns i en speciell mapp varje gång sidan laddas. Nån som vet?!?
Antingen så döper du dom till nummer och slumpar mellan numren.
Eller så listar du dom på serven och efter ett visst slumpat tal av filer som listats på serven så vísar du den
Hmm, okej! Ska se om jag lyckas. Är inte så bra på slumpning!
..eller så läser du in dem i en array och slumpar från arrayen.
Åhh, ännu värre. Jag har inte lärt mig om arrayer ännu. Haha! Nåt ställe där man kan läsa om detta?
Skapa array:
[red]For Each Image In objFolder 'Loopa bilderna från mappen
strImage = strImage & Image.Name &";"
Next[/red]
Skapa arrayen genom att splitta strImage vid ;
ex arrImage = Split(strImage, ";")
Slumpa sedan ett tal mellan LBound(arrImage) och UBound(arrImage) så är det klart.. =)
[r] Missade ju att lägga ut allt.. :r
Men jag har denna kod nu! Ska jag ha nåt kvar av denna kod?
<%Set FSO = Server.CreateObject("Scripting.FileSystemObject")
Set Mapp = FSO.GetFolder(Server.MapPath("stuff"))
If Mapp.Files.Count = 0 Then%>
TOMT
<%Else
x=0
For Each File In Mapp.Files
If X = 1 Then
Exit For
End If%>
<a href="main.asp?cat=pics"><img src="stuff/<%=File.Name%>" border="1" width="100" height="75"></a>
<%x=x+1
Next
End If%>
Här är då en komplett variant:
[red]<%
Set FSO = Server.CreateObject("Scripting.FileSystemObject")
Set Mapp = FSO.GetFolder(Server.MapPath("stuff"))
If Mapp.Files.Count = 0 Then
Response.Write "Tomt!"
Else
For Each File In Mapp.Files
strImage = strImage & File.Name &";"
Next
arrImages = Split(strImage, ";")
End If
Set FSO = Nothing
If IsArray(arrImages) Then
randomize
rndNumber = Int(Rnd * UBound(arrImages))
Response.Write "<a href=""main.asp?cat=pics""><img src=""stuff/"& arrImages(rndNumber) &""" border=""1"" width=""100"" height=""75""></a>"
End If
%>[/red]
Supersnällt av dig Palle! Måste nog sätta mig ner och kolla igenom detta å lära mig! :)
np :)
Vad händer när rnd blir 1???
Sista indexet i denna array är ju tom
Borde det inte vara:
<%
Set FSO = Server.CreateObject("Scripting.FileSystemObject")
Set Mapp = FSO.GetFolder(Server.MapPath("stuff"))
If Mapp.Files.Count = 0 Then
Response.Write "Tomt!"
Else
For Each File In Mapp.Files
strImage = strImage & File.Name &";"
Next
[b]strImage = Left(strImage, Len(strImage) - 1)[/b]
arrImages = Split(strImage, ";")
End If
Set FSO = Nothing
If IsArray(arrImages) Then
randomize
rndNumber = Int(Rnd * UBound(arrImages))
Response.Write "<a href=""main.asp?cat=pics""><img src=""stuff/"& arrImages(rndNumber) &""" border=""1"" width=""100"" height=""75""></a>"
End If
%>
cya,
PatrikB
Jag har inte fått några problem med koden som Palle skrev. Å lägger jag in din kod får jag felmess!
Feltyp:
Körningsfel i Microsoft VBScript (0x800A0005)
Ogiltigt proceduranrop eller argument.: 'Left'
ett sätt att testa slumpningen från arrayer är att sätta rnd = 1 då det är det största värde rnd kan få. Om du byter ut rnd mot 1 i palles kod så ser du att det kommer att bli tomt.
Du måste "filtrera" bort det sista ; -tecknet INNAN du splittar till array.
cya,
PatrikB
PatrikB skrev:
Du måste "filtrera" bort det sista ; -tecknet INNAN du splittar till array.
Hmm.. Är du säker på det? ;)
Testa följande ska du se:
[red]<%
str = "bild1;bild2;bild3;bild4;bild5;"
arr = Split(str, ";")
For i = 0 To 100000
randomize
rndNumber = Int(Rnd * UBound(arr))
Response.Write arr(rndNumber) &"<br>"
Next
%>[/red]
Jag får inga felmeddelande på 100.000 försök ens.. :OO
jag är helt hundra.
Rnd slumpar ett tal som är mindre än, nästan lika med 1 (0.9999) och då får du det sista indexet i arrayen som är tomt. Ingen bild kommer att visas.
Testa denna kod:
<%
strImage = "bild0;bild1;bild2;bild3;bild4;bild5;bild6;bild7;bild8;bild9;"
varyImage = Split(strImage,";")
For N = 0 TO 100
Randomize Timer()
rndNum = (rnd * UBound(varyImage))
If Len("" & Trim(varyImage(rndNum))) = 0 Then
Response.Write "ERROR: Tomt index!"
Exit For
End If
Next '## -- N --
%>
Testa sedan med att ta bort det sista ;
cya,
PatrikB
Du har helt säkert rätt, men faktum kvarstår dock.. ;) ..koden som jag postade tidigare fungerar problemfritt.
Använder liknande funktion på flera siter utan minsta problem.
emellanåt så kommer det inte att visas en bild ... det är jag helt säker på :e
Din kod går igenom utan felmeddelanden, men när rnd blir nästan 1 så har du ett tomt index och ingen bild kommer att visas .... kanske dags att uppdatera kod?
UPPDATERAT:
Körde denna kod:
<%
strImage = "bild0;bild1;bild2;bild3;bild4;bild5;bild6;bild7;bild8;bild9;"
varyImage = Split(strImage,";")
For N = 0 TO 1000000
Randomize
rndNum = (rnd * UBound(varyImage))
'Response.Write varyImage(rndNum) & "<br>"
If Len("" & Trim(varyImage(rndNum))) = 0 Then
'Response.Write "ERROR: Tomt index!"
'Exit For
I = I + 1
End If
Next '## -- N --
Response.Write "Antal inträffade fel: " & I
%>
Den genererade ett tom index (det sista indexet) 50 000 ggr, dvs ca 5% av alla visningar kommer att sakna bild.
:SLUT UPPDATERAT
cya,
PatrikB
PatrikB skrev:
kanske dags att uppdatera kod?
Nja, eftersom den fungerar och syftet inte är att räkna tomma index utan att visa faktiska bilder,
så känner jag inget jättebehov att att uppdatera den. :p ;)
Men, jag lovat att jag ska uppdatera koden den dagen jag få fel på den.
Och tjurig som jag är skapade jag 10 småbilder och testkörde denna koden:
[red]<%
str = "bild1;bild2;bild3;bild4;bild5;bild6;bild7;bild8;bild9;bild10;"
arr = Split(str, ";")
For i = 0 To 100000
randomize
rndNumber = Int(Rnd * UBound(arr))
Response.Write "<img src="""& arr(rndNumber) &".gif"" width=""10"" height=""10"">"
Next
%>[/red]
..och jag får faktiskt inte en enda bruten bild. :) bild
PatrikB skrev:
Vad händer när rnd blir 1???
VBScriptmanualen skrev:
The Rnd function returns a value less than 1 but greater than or equal to 0.