---
title: "Slumpa med fso"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/77109-slumpa-med-fso"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Asa"
published: "2003-05-15T21:47:15.000Z"
updated: "2004-09-01T15:18:41.000Z"
replies: 25
views: 886
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/77109-slumpa-med-fso"
---

# Slumpa med fso

_Sida 1 av 2._

## #1 — Asa, 2003-05-15T21:47Z

Vill slumpa fram en bild som finns i en speciell mapp varje gång sidan laddas. Nån som vet?!?

Permalänk: https://www.webforum.nu/p/77109

## #2 — Nickemannen, 2003-05-15T21:53Z

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

Permalänk: https://www.webforum.nu/p/1050431

## #3 — Asa, 2003-05-15T21:54Z

Hmm, okej! Ska se om jag lyckas. Är inte så bra på slumpning!

Permalänk: https://www.webforum.nu/p/1050432

## #4 — Palle, 2003-05-15T22:05Z

..eller så läser du in dem i en array och slumpar från arrayen.

Permalänk: https://www.webforum.nu/p/1050437

## #5 — Asa, 2003-05-15T22:09Z

Å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?

Permalänk: https://www.webforum.nu/p/1050440

## #6 — Palle, 2003-05-15T22:23Z

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

&nbsp;

Permalänk: https://www.webforum.nu/p/1050450

## #7 — Asa, 2003-05-15T22:25Z

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%>
```

Permalänk: https://www.webforum.nu/p/1050452

## #8 — Palle, 2003-05-15T22:39Z

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]
```

Permalänk: https://www.webforum.nu/p/1050464

## #9 — Asa, 2003-05-15T22:43Z

Supersnällt av dig Palle! Måste nog sätta mig ner och kolla igenom detta å lära mig! :)

Permalänk: https://www.webforum.nu/p/1050466

## #10 — Palle, 2003-05-15T22:49Z

np :)

Permalänk: https://www.webforum.nu/p/1050467

## #11 — PatrikB, 2003-05-16T06:19Z

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

Permalänk: https://www.webforum.nu/p/1050529

## #12 — Asa, 2003-05-16T06:23Z

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'
```

Permalänk: https://www.webforum.nu/p/1050531

## #13 — PatrikB, 2003-05-16T06:35Z

Du har du skrivit av fel .... jag vet att det funkar

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/1050539

## #14 — PatrikB, 2003-05-16T06:41Z

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

Permalänk: https://www.webforum.nu/p/1050544

## #15 — Palle, 2003-05-20T15:20Z

> **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

Permalänk: https://www.webforum.nu/p/1056924

## #16 — PatrikB, 2003-05-20T16:01Z

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

Permalänk: https://www.webforum.nu/p/1056955

## #17 — Palle, 2003-05-20T16:11Z

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.

Permalänk: https://www.webforum.nu/p/1056961

## #18 — PatrikB, 2003-05-20T16:21Z

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

Permalänk: https://www.webforum.nu/p/1056972

## #19 — Palle, 2003-05-20T16:56Z

> **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](http://member.webforum.nu/366/loop.gif)

Permalänk: https://www.webforum.nu/p/1056990

## #20 — niko, 2003-05-20T17:03Z

> **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.

Permalänk: https://www.webforum.nu/p/1056995

---

Tråden på webben: https://www.webforum.nu/amne/asp/77109-slumpa-med-fso  
Nästa sida: https://www.webforum.nu/amne/asp/77109-slumpa-med-fso/page2.md
