---
title: "slumpa array -- fel i kod hos pellesoft"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/128395-slumpa-array-fel-i-kod-hos-pellesoft"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Eclipse"
published: "2005-05-17T18:59:21.000Z"
updated: "2005-05-18T19:50:42.000Z"
replies: 19
views: 446
page: 1
pages: 1
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/128395-slumpa-array-fel-i-kod-hos-pellesoft"
---

# slumpa array -- fel i kod hos pellesoft

## #1 — Eclipse, 2005-05-17T18:59Z

<http://www.pellesoft.se/area/articles/article.aspx?artid=808>

Hittade denna som jag skulle vilja använda... Det andra exemplet.

Men det är två fel. Jag har sktivit till honom, men inte fått svar.

byt från: RandomNumber = Int(RND(\*MaxValues) + 1
byt till: RandomNumber = Int(RND \* MaxValues) + 1

Sen blir det fel vid denna raden och jag fattar inte varför!

MaxItems = UBound(Array)

Microsoft VBScript runtime error '800a000d' 

Type mismatch: 'UBound' 

/random.asp, line 29

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

## #2 — desdecado, 2005-05-17T19:06Z

Uhm nu var det ett tag sedan jag kodade asp, men variabeln Array är väl ingen array just vid det tillfället? (man kan väl inte köra en ubound på en icke-array?)

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

## #3 — Eclipse, 2005-05-17T19:07Z

Hmmm... nej, jag har också filosoferat i dom banorna!

Är det så?

Varför döper man en lokal variabel till Array när det är ett reserverat ord i ASP?

Varför postar man kod som inte fungerar som exempel på kod som fungerar?

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

## #4 — Eclipse, 2005-05-17T19:19Z

Grrr....

Han har glömt att DIM b  !!!

Vad står det här??

```
Response object error 'ASP 0251 : 80004005' 

Response Buffer Limit Exceeded 

/random.asp, line 0 

Execution of the ASP page caused the Response Buffer to exceed its configured limit.
```

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

## #5 — desdecado, 2005-05-17T19:26Z

..det står att du loopar så jävla mycket så att output-buffern på servern spydde. Dvs du måste bryta dig ur loopen... kan ju iofs bero på att din array är gigantiskt stor...

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

## #6 — Eclipse, 2005-05-17T19:32Z

IF IsArray(Array) THEN MaxItems = UBound(Array) ELSE MaxItems = 1

OK, mitt fel.

Jag bytte 0 mot 1 och då blev det inte så...

\*\*\*
Nu är det bara type mismatch....

Response.write varType(Array(b)) & "\<BR\>"

Microsoft VBScript runtime error '800a000d' 

Type mismatch 

/random.asp, line 47 

\*\*\*
Finn Fem Fel...!! :-)

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

## #7 — Eclipse, 2005-05-17T20:42Z

Mycket snyggare, mycket mindre!

<http://www.webforum.nu/showthread.php?s=&postid=59777#post59777>

```
dim allpictures(4)

  'läs in alla filnamn i en array allpictures, 
  'utlämnas som övning till läsaren
	  allpictures(0) = "1.jpg"
	  allpictures(1) = "33.jpg"
	  allpictures(2) = "56.jpg"
	  allpictures(3) = "77.jpg"

  dim choosen(4)
  dim i,pictures,choice

  randomize
  for i = 0 to 4
      choice = int((ubound(allpictures)+1-i)*rnd())
      choosen(i) = allpictures(choice)
      allpictures(choice) = allpictures(ubound(allpictures)-i)
  next

FOR i = 0 TO UBound(choosen,1)
	response.write choosen(i) & " "
NEXT
```

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

## #8 — desdecado, 2005-05-17T20:50Z

for i = 0 to 4   \<--- jag tror du bara ska loopa till 3 då arrayer är 0-baserade (dvs du har dimmat 4 dimensioner = 0 till 3)

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

## #9 — Eclipse, 2005-05-17T21:08Z

OK, sorry. Kåden kommer från LarsG och är tänkt som insperation. Visst, du har rätt, sånt får man fixa.

Jag kan posta min kod sen, men nu ska jag hem och schlafen! :-)

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

## #10 — Eclipse, 2005-05-18T09:45Z

```
myRow = application("activeUsers")

IF IsArray(myRow) THEN response.write "xxxxxx " ELSE response.write "nooo!!"

response.write  UBound(myRow)

i = UBound(myRow)
'  dim choosen(4)
  [b]dim choosen(UBound(myRow))[/b]
'  dim i,pictures,choice

randomize
for i = 0 to UBound(myRow)
	choice = int((ubound(myRow)+1-i)*rnd())
	choosen(i) = myRow(choice)
	myRow(choice) = myRow(ubound(myRow)-i)
next

FOR i = 0 TO UBound(choosen,1)
	response.write choosen(i) & " "
NEXT

***
Så här ser koden ut nu och felmeddlandet lyder:

Microsoft VBScript compilation error '800a0402' 

Expected integer constant 

/v1/random.asp, line 40 

dim choosen(UBound(myRow))
------------^
```

Jag har testat lite olika varianter och nu undrar jag varför jag inte kan sätta längden på en array till samma längd som en annan array...??

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

## #11 — @nders, 2005-05-18T09:47Z

Av någon anledning får du inte göra så vid *dim*, däremot vid *redim*. Detta fungerar:

```
  dim choosen
  redim choosen(UBound(myRow))
```

mvh

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

## #12 — Guffa, 2005-05-18T10:02Z

Ännu snyggare, ännu mindre. ;)

<http://guffa.com.loopiadns.com/Programming_archive.asp?id=8>

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

## #13 — Eclipse, 2005-05-18T11:53Z

Imponerande, verkligen! Nu är det itne siffror jag ska skumpa fram utan ord som ska byta plats... Jag vet inte vilket som är bäst!

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

## #14 — Guffa, 2005-05-18T13:49Z

Lägg det som ska slumpas i en array, och använd talet som index i arrayen.

Ifall du bara vill kasta om värdena så lämpar sig naturligtvis inte metoden jag visade. Den visar alltid värdena i ordning.

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

## #15 — Eclipse, 2005-05-18T14:10Z

```
SQL = "SELECT intID, strName FROM [users];"
set mySQL = Conn.Execute(SQL)
IF NOT mySQL.EOF THEN 
	myRow = mySQL.GetRows()
  redim myUsers(UBound(myRow,2))

	FOR j = 0 TO UBound(myRow,2)
		myUsers(j) = myRow(1,j)
	NEXT
END IF

redim choosen(UBound(myUsers))

randomize
for i = 0 to UBound(myUsers)
	choice = int((ubound(myUsers)+1-i)*rnd())
	choosen(i) = myUsers(choice)
	myUsers(choice) = myUsers(ubound(myUsers)-i)
next

FOR i = 0 TO UBound(choosen)
	response.write choosen(i) & " "
NEXT
```

Denna koden hämtar användarna och tilldelar ett värde i en array:
myUsers(0) = "Anders"
myUsers(1) = "Krabban"
myUsers(2) = "Erik"
myUsers(3) = "Pelle"

Sen tar koden dom fyra och kastar om ordningen.

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

## #16 — Eclipse, 2005-05-18T14:42Z

2-dimmensionell array

Jag kom på att det blir snyggare  med en tvådimmensionell array!

Men det är alltid bara första raden som fungerar! 

rundan runda konst vasstena vadstena 
vasstena vasstena vadstena vadstena vasstena 
vasstena vasstena vasstena vasstena vasstena 
vasstena vasstena vasstena vasstena vasstena 
vasstena vasstena vasstena vasstena vasstena 

```
IF NOT mySQL.EOF THEN 
	myRow = mySQL.GetRows()
	redim myWords(UBound(myRow,2))

	FOR j = 0 TO UBound(myRow,2)
		myWords(j) = myRow(1,j)
	NEXT
END IF

redim choosen(UBound(myWords),UBound(myWords))

FOR j = 0 TO UBound(myWords)
	randomize
	FOR i = 0 TO UBound(myWords)
		choice = INT((ubound(myWords)+1-i)*RND())
		choosen(i,j) = myWords(choice)
		myWords(choice) = myWords(UBound(myWords)-i)
	NEXT

	FOR i = 0 TO UBound(choosen,2)
		response.write choosen(i,j) & " "
		IF i = UBound(choosen,2) THEN response.write "<BR>"
	NEXT
NEXT
```

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

## #17 — Guffa, 2005-05-18T15:09Z

När du loopat igenom arrayen en gång så har du ju tagit bort värdena i den. För varje värde du slumpar fram så skrivs det ju över av det sista värdet i arrayen. Alltså kan du inte använda arrayen mer än en gång.

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

## #18 — Eclipse, 2005-05-18T15:11Z

Nej... jag har förstått att det måste vara nåt sånt! Men man måste ju kunna återställa den...

Eller det kanske inte går!?

Spara i nån slags temp array... Återkommer!

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

## #19 — Guffa, 2005-05-18T17:21Z

Du kan göra en array med index som du tar bort värdena i istället för att flytta om värdena i arrayen med ord. Den är enklare att fylla med nya värden än att kopiera arrayen med ord.

Såg ett fel i slumpfunktionen. Den kommer aldrig att slumpa fram det sista ordet i arrayen först.

Int((UBound(myWords) - i) \* Rnd())

ska vara:

Int((UBound(myWords) + 1 - i) \* Rnd())

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

## #20 — Eclipse, 2005-05-18T19:50Z

Min vän!

Du har ögon som en hök! Jättetack! Jag har ändrat detta fel på hela denna sidan.

\*\*\*
Jag har sovit på saken och kommit fram till att jag nöjer med det sm fungerar nu.

Det är kod som kommer att hänga med länge...

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/128395-slumpa-array-fel-i-kod-hos-pellesoft
