Avatar billede cyberkox Nybegynder
08. maj 2006 - 23:40 Der er 29 kommentarer og
2 løsninger

Random picture med FSO

Hey

Jeg har en mappe med en masse undermappe. I undermapperne ligger der en masse billeder.

Nu vil jeg gerne have et billede vist, men det skal være et forskelligt hver gang. Forstår i :-)

Mvh
Avatar billede cyberkox Nybegynder
08. maj 2006 - 23:45 #1
Det er vel noget med at første skal der vælges en random undermappe, og så i undermappen igen et random billede.

Kan det gøres på en smartere/hurtigere måde?
Avatar billede thesurfer Nybegynder
08. maj 2006 - 23:47 #2
Det er da smart nok i forvejen..

Alternativet, der ikke er så smart (?), er at gennemløne alle (under)mapperne, og tilføje stierne til billederne, til en array. Derefter kan du lave random og bruger værdien til arrayen index..

Men random undermappe, og derefter random billede er nok bedre, og klart mindre ressource krævende..
Avatar billede thesurfer Nybegynder
08. maj 2006 - 23:48 #3
Du kunne også danne en txt fil (eller en anden slags fil), og putte alle stierne i filen.

Du kunne derefter læse filen med FSO, 1 sti per linie, ind i en array, og derefter bruge værdien fra random.

Det er måske bedre end at bruge random undermappe, og derefter random billede..
Avatar billede eagleeye Praktikant
08. maj 2006 - 23:48 #4
Enig med thesurfer.  Alternativ at havdebillede navne i en database kan du lave en SQL som vælger et ramdom billede.
Avatar billede thesurfer Nybegynder
08. maj 2006 - 23:51 #5
Ja, det er nok bedre med en database.. :-)

Nok en ok rækkefølge:

database
txt file
random undermappe + random billede
alle mapper + alle billeder
Avatar billede cyberkox Nybegynder
08. maj 2006 - 23:51 #6
Det med en database lyder meget godt, men jeg har valgt at galleriet skal køres uden db, derfor er navne/stierne ikke tastet ind.

Hvordan finder man så random undermappe med fso ?
Avatar billede thesurfer Nybegynder
08. maj 2006 - 23:53 #7
Man laver først random, efter at alle undermapperne er læst ind i arrayen..

Dvs:
loop: så længe at der er undermapper
  tilføj nuværende mappe til array
gentag loop

find random UnderMappe

loop: så længe at der er filer i UnderMappe
  tilføj fil til array
gentag loop

find random billede
Avatar billede cyberkox Nybegynder
08. maj 2006 - 23:54 #8
Er det ikke ret ressource krævende eller hvordan ?
Avatar billede thesurfer Nybegynder
08. maj 2006 - 23:55 #9
Avatar billede cyberkox Nybegynder
08. maj 2006 - 23:56 #10
Men altså, der findes ikke en funktion der i sig selv kan vælge en tilfældig mappe ?
Avatar billede thesurfer Nybegynder
08. maj 2006 - 23:56 #11
Jo flere mapper og billeder du har, jo mere ressourcekrævende er det..

Men det er vist ikke særligt ressourcekrævende igen.. loops og fso tager ressourcer, hvis man ikke bruger dem ordentligt = undgå unødvendige afviklinger/udførelser/handlinger..
Avatar billede thesurfer Nybegynder
08. maj 2006 - 23:56 #12
Nej.. og man kan hellere ikke sortere automatisk..
Avatar billede thesurfer Nybegynder
08. maj 2006 - 23:57 #13
Man kan (så vidt jeg ved) ikke vælge en tilfældig mappe.. det kan være at eagleeye har et trick..

Men jeg mener at du bliver nødt til at tilføje dem, til f.eks. en array, og derefter lave random.
Avatar billede cyberkox Nybegynder
08. maj 2006 - 23:58 #14
Det er ikk så vikst lavet, det fso hva ;-)

Det vil sige jeg bare skal gå i krig med først at lave random på undermapperne osv som i siger ?
Avatar billede thesurfer Nybegynder
08. maj 2006 - 23:58 #15
Avatar billede thesurfer Nybegynder
08. maj 2006 - 23:58 #16
Avatar billede cyberkox Nybegynder
09. maj 2006 - 00:00 #17
Jeg har godt styr på fso, så det behøver du ikke sende mig links til ;-)

Derimod ved jeg ikke helt hvordan jeg får smidt værdierne ind i et array ?
Avatar billede thesurfer Nybegynder
09. maj 2006 - 00:02 #18
<%
dim fs,fo,x
set fs=Server.CreateObject("Scripting.FileSystemObject")
set fo=fs.GetFolder("c:\test\")

dim mapper
mapper = ""

for each x in fo.SubFolders
  mapper = mapper & x.Name & ";"
next

set fo=nothing
set fs=nothing

mapper = left(mapper, len(mapper) - 1) ' fjern det sidste ";"

mapper = split(mapper, ";") ' lav til array


%>

Det samme med filer..
Avatar billede eagleeye Praktikant
09. maj 2006 - 00:08 #19
du behøver ikke lave et array du kan gøre sådan her:



Set fso = Server.CreateObject("Scripting.FilesystemObject")

Set folder = fso.GetFolder("c:\xx\xx\xx\")
Set subFol = folder.SubFolders
antal = subFol.Count

randomize
folderIndex = int(antal * rnd)+1

for each folder in subFol
  folderIndex = folderIndex - 1
    if folderIndex = 0 then
      folderNavn = folder.Name
      exit for
  end if
next

response.write folderNavn


Her kan du finde filerne i folderen folderNavn det gøres på samme nåde
Avatar billede cyberkox Nybegynder
09. maj 2006 - 00:10 #20
Aha, rent performance, er Eagleeeys så bedst eller hvordan?
Avatar billede thesurfer Nybegynder
09. maj 2006 - 00:10 #21
eagleeye har mere styr på det, så det vil jeg mene.. :-)
Avatar billede cyberkox Nybegynder
09. maj 2006 - 00:11 #22
Det er ingen kritik af dig, thesurfer. Jeg ville bare høre hvad der var hurtigst :-)
Avatar billede thesurfer Nybegynder
09. maj 2006 - 00:13 #23
Det vil jeg da også gerne vide.. :-)
Avatar billede eagleeye Praktikant
09. maj 2006 - 00:17 #24
Den laver ikke et ekstra array først og så finder en random tal og stlår op i arrayet. Den finder antallet af foldre/filer i collection, finder et random tal og laver et loop indtil den har tal op til det random tal, finder folder/fil nanvet.


Så jeg vil mene den er bedre performance msssigt da den  kun loop igennem folder/file collection indtil den finder den valgt folder/fil og den kopier kun et folder/fil navn.
Avatar billede cyberkox Nybegynder
09. maj 2006 - 00:37 #25
Jamen det virker jo helt efter planen.. Takker mange gange.

Et sidste spm:
Findes der ingen metode hvorpå jeg kan gøre sådan:
<!-- #include file="rnd_picture.asp?width=400" -->
eller
<% server.execute("rnd_picture.asp?width=400") %>

?
Avatar billede thesurfer Nybegynder
09. maj 2006 - 00:41 #26
Man kan ikke bruger parametere med indclude.. måske kan man med Server.Execute eller Server.Transfer.
Avatar billede eagleeye Praktikant
09. maj 2006 - 00:41 #27
Hvis du rbuger server.execute kan du hente width med Request.QueryString("width"

Hvis du bruger include mener jeg man skal skrive det sådan her:

<% width=400 %>
<!-- #include file="rnd_picture.asp" -->


Så kan du i rnd_picture.asp bruge variablen width direkte.



Forskellen på include og server.execute er at incude køre i samme adresse space hvilket betyder de deler variablenavne så hvis du opretter en variable i den fil som laver include kan den variable ses i rnd_picture.
Avatar billede cyberkox Nybegynder
09. maj 2006 - 00:43 #28
Ved server.execute melder den fejl? Det er såmænd smart nok det med at angive værdien først, og så bruge include. Jeg takker!

Smid nogle svar :-)
Avatar billede eagleeye Praktikant
09. maj 2006 - 00:44 #29
her et svar fra  mig, jeg smutter også i seng nu så i må sove godt ;)
Avatar billede thesurfer Nybegynder
09. maj 2006 - 00:48 #30
Og et svar fra mig.. godnat og sov godt, y'all.. :-)
Avatar billede cyberkox Nybegynder
12. maj 2006 - 21:53 #31
Jeg takker for debatten og hjælpen :-)
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