webForumDet fria alternativet

Slumpa fram bilder

ASP

10 svar · 329 visningar · startad av Fredriksson

Medlem sedan nov. 2000319 inlägg
Frågan#1

Jag har en mapp med bilder som heter 1.jpg, 3.jpg 34.jpg osv. Alla nummer finns alltså inte.

Nu vill jag slumpa fram 5st av dessa bilder.

Hur? :q

------------------
F R E D R I K S S O N

Medlem sedan dec. 200012 464 inlägg
#2
  dim allpictures()

  'läs in alla filnamn i en array allpictures, 
  'utlämnas som övning till läsaren
  
  dim choosen(4)
  dim i,pictures,choice

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

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20002 836 inlägg
#3

hello,

LarsG:
Ditt exempel kan slumpa ut samma bild 2 ggr.

Fredriksson:
Du får här en hel sida som du bara behöver klippa och klistra.

Kolla in funktionen hur den funkar och hur arrayerna jobbar mot varandra för att visa slumpvis valda bilder.

Utifrån detta kan du skapa bildarrayen dynamiskt med hjälp av LarsGs kod.

<HTML>
<HEAD>
<TITLE>Unique Images.</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>

<BODY bgcolor="#FFFFFF" text="#000000">
<%
'## -- denna funktione returnerar en kommaterad sträng med unika nummer --
Function getUniqueNo(ByVal HowManyNumbers, ByVal FromNumbers) ' As String

	Dim m_strNumbers ' As String
	Dim I ' As Integer
	Dim m_intNumber ' As Integer
	
	'## -- se till att start strängen att lägga de slumpade 
	'##    nummrena är tom --
	m_strNumbers = ""
	
	'## -- slumpa tal med systemklockan som hjälp så att inte 
	'##    samma tal slumpas om och om igen --
	Randomize
	
	'## -- kolla om antalet unika nummer är mindre eller lika
	'##    med antal nummer att välja från --
	If HowManyNumbers > FromNumbers Then HowManyNumbers = FromNumbers
	
	'## -- loopa igenom och generera slumptal --
	For I = 1 To HowManyNumbers
		'## -- slumpa ut ett tal --
		m_intNumber = CInt(rnd*(FromNumbers))
		
		'## -- kolla om talet redan slumpats --
		If InStr(m_strNumbers,"#" & m_intNumber & ",") = 0 Then
			'## -- talet har inte tidigare slumpats. Lägg till nummret --
			m_strNumbers = "#" & m_intNumber & "," & m_strNumbers
		Else
			'## -- talet var redan utslumpat. backa tillbaka och kör en ggn till --
			I = I - 1
		End If
	Next
	
	'## -- ta bort staket avgränsaren --
	m_strNumbers = Replace(m_strNumbers,"#","")
	
	'## -- ta bort det sista komma-tecknet i strängen om det finns ngt --
	If Right(m_strNumbers,1) = "," Then
		m_strNumbers = Left(m_strNumbers,Len(m_strNumbers) - 1)
	End If
	
	'## -- returnera resultatet --
	getUniqueNo = m_strNumbers
End Function

Dim arrNumbers
Dim arrArray(9)
Dim I

arrArray(0) = "0.gif"
arrArray(1) = "1.gif"
arrArray(2) = "2.gif"
arrArray(3) = "3.gif"
arrArray(4) = "4.gif"
arrArray(5) = "5.gif"
arrArray(6) = "6.gif"
arrArray(7) = "7.gif"
arrArray(8) = "8.gif"
arrArray(9) = "9.gif"

'## -- de unika nummrena splittade till en array.
'##    Används för att plocka ut slumpvis valda positioner från 
'##    arrayen med bilder --
arrNumbers = Split(getUniqueNo(5,UBound(arrArray)),",")

For I = 0 To UBound(arrNumbers)
	Response.Write arrArray(arrNumbers(I)) & "<BR>"
Next
%>
</BODY>
</HTML>

cya,
PatrikB

------------------
*Det jämnar ut sig sa han som sket i byxan och satte sig ned*

Medlem sedan dec. 200012 464 inlägg
#4

LarsG:
Ditt exempel kan slumpa ut samma bild 2 ggr.

Nej det tycker jag inte. Hur då i så fall?

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20002 836 inlägg
#5

Det kommer att bli lika bilder ngn ggn.
Denna rad:

int((ubound(allpictures)-i)*rnd())

Vi säger att UBound(allpictures) = 35
Kommer att första ggn slumpa tal som ligger mellan
0 och 35 - 0 i första loopen
0 och 35 - 1 för andra varvet ...

du ser ... det komemr att kunna slumpas likadana bilder ngn ggn.

cya,
PatrikB

------------------
*Det jämnar ut sig sa han som sket i byxan och satte sig ned*

Medlem sedan dec. 200012 464 inlägg
#6

Patrik,

på platsen för den bild som man har valt så stoppar jag in den bild som ligger sist i arrayen.

dvs, om arrayen inneåller

A B C D E

och jag väljer C så ser den ut som

A B E D E

nästa gång och då väljer jag mellan dom 4 första

Om jag nu väljer D så blir det

A B E D E

och sedan så väljer jag mellan dom 3 första osv.

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20002 836 inlägg
#7

he, he ... stämmer ...

provkörde och "visade" fel array ... då vart det många bilder som va lika.

kollade igenom lite mer noggrant och ser nu att den funkar alldeles utmärkt =O)

cya,
PatrikB

------------------
*Det jämnar ut sig sa han som sket i byxan och satte sig ned*

Medlem sedan nov. 2000319 inlägg
#8

Så de båda koderna funkar alltså lika bra då, eller?

Funkar de även om inte alla nummer finns med?

------------------
F R E D R I K S S O N

Medlem sedan mars 20002 836 inlägg
#9

Båda koderna funkar även om vissa id-nummer tex fattas i databasen.

Tycker nog att LarsGs variant är bättre

cya,
PatrikB

------------------
*Det jämnar ut sig sa han som sket i byxan och satte sig ned*

Medlem sedan nov. 2000319 inlägg
#10

:r

'läs in alla filnamn i en array allpictures,
'utlämnas som övning till läsaren

Nån som har lust att göra detta???

------------------
F R E D R I K S S O N

Medlem sedan mars 20002 836 inlägg
#11

sök här på forumet om arrays ....

du kommer nog på en länk som går till en tutorial om arrayer som Vide gjort.

cya,
PatrikB

------------------
*Det jämnar ut sig sa han som sket i byxan och satte sig ned*

251 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)