03. juli 2007 - 15:25Der er
15 kommentarer og 1 løsning
Array redim og funktion der returnere array
Hejsa 2 problemer...
1) Jeg kan ikke få redim at at virke for mit array, jeg har: ************************* Function getArrOfURLs(strOmr, strPlace) Dim arrUrlsToReturn() redim arrUrlsToReturn(0,1)
sql select....
i = 0 Do Until rs.EOF if i <> 0 then 'GØR PLADS TIL EN MERE 'HAR PRØVET: redim arrUrlsToReturn(ubound(arrUrlsToReturn)+1,1), MEN DET VIRKER IKKE end if arrUrlsToReturn(i,0) = "" & rs("OmrNavn") arrUrlsToReturn(i,1) = basisURL & rs("mappe") & "/" i = i + 1 rs.movenext loop getArrOfURLs = arrUrlsToRetur End Function *************************
2) Ovenstående array bliver lavet i en function som det ses. Men når jeg vil sætte en variabel = med det virker kun hvis der er 1 post i array'et er der mere en 1 kommer der ikke noget ud. Sådan her gør jeg:
************* arrOmr = getArrOfURLs(rs("omraade"),"Artikler") if isArray(arrOmr) then for i=lbound(arrOmr) to ubound(arrOmr) Response.Write arrOmr(i,0) Next end if **************
Dette er testet ved i funktionen at droppe redim og bare lave pladser nok Dim arrUrlsToReturn(100,1). Men jeg vil som sagt gerne at funktionen ved hjælp af redim opbygger at array med x poster "arrUrlsToReturn(x,1)", og at jeg derefter kan sætte en variabel = min funktion og udskrive arrayet.
Er det til at forstå?
Det har drillet mig meget så der er 200 point til den der lige ved hvordan, jeg får det til at hænge sammen :)
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
1. Hver gang man kalder redim slettes alle data medmindre der er Preserve påsat 2. Med Preserve kan man kun ændre den sidste dimension
Et par eks (single array): dim tmpArr reDim tmpArr(1) tmpArr(0) = "hej" tmpArr(1) = "med" reDim tmpArr(2) tmpArr(2) = "dig"
tmpArr indeholder nu kun "dig" i 2 index. 0 og 1 er tomme. Samme kode men med: reDim Preserve tmpArr(2) tmpArr(2) = "dig"
tmpArr indeholder nu hej, med, dig.
Multiarray: dim tmpArr reDim tmpArr(1,1) tmpArr(0,1) = "hej" tmpArr(1,1) = "med" reDim Preserve tmpArr(2,1) '<-- ulovlig da man kun må ændre på sidste dimension med preserve tmpArr(2,1) = "dig"
Det skal der i mod være: dim tmpArr reDim tmpArr(1,1) tmpArr(1,0) = "hej" tmpArr(1,1) = "med" reDim Preserve tmpArr(1,2) tmpArr(1,2) = "dig"
Din kode skal altså ændres til noget ala: redim preserve arrUrlsToReturn(1,ubound(arrUrlsToReturn,2)+1)
Læg mærke til at uBound kaldes med parameteren 2. Det signallere 2 dimension. Den er default 1.
Når man gør sådan her: for f=1 to 10 reDim Preserve tmpArr(1,ubound(tmpArr,2)+1) tmpArr(0,ubound(tmpArr,2)) = rnd() tmpArr(1,ubound(tmpArr,2)) = rnd() next Springer man så ikke den første plads over?
Do Until rs.EOF redim Preserve arrUrlsToReturn(1,ubound(arrUrlsToReturn,2)+1) arrUrlsToReturn(0,ubound(arrUrlsToReturn,2)) = "" & rs("OmrNavn") arrUrlsToReturn(0,ubound(arrUrlsToReturn,2)) = basisURL & rs("mappe") & "/" rs.movenext loop
og det ser ud til at virker, jeg forstår bare ikke hvorfor jeg ikke kommer til at springe den første post i arrayet over? Jeg har jo i starten re-dim'et den til at indholde 1 post også redim'er jeg den igen iden jeg fylder noget i??? Eller misforstår jeg noget?
Det er bare forskellige eksempler. Begge er rigtige. Det handler om hvilken måde man "se" data.
Et array på 10,2 kan jo også være som 2,10.
Og jo, man springer den første plads over. Men det er nemmere at arbejde med rækker som begynder fra 1 i stedet for 0. Derfor burde jeg måske også have gjort det i udskrift eks: for f=0 to ubound(tmpArr,2) Response.write "<tr><td>"& tmpArr(0,f) & "</td>" Response.write "<td>"& tmpArr(1,f) & "</td></tr>" next
burde have været: for f=1 to ubound(tmpArr,2) Response.write "<tr><td>"& tmpArr(0,f) & "</td>" Response.write "<td>"& tmpArr(1,f) & "</td></tr>" next
hvorfor virker nedenstående kun når min funktion returnerer 1 post (hvis sql'en er tom), er der flere poster bliver der ikke skrevet noget ud?:
Function getArrOfURLs(strLokalomraader, strPlace) Dim arrUrlsToReturn() redim arrUrlsToReturn(1,0) ... if not rs.eof then ... else arrUrlsToReturn(0,0) = "NOMATCH" arrUrlsToReturn(1,0) = "" getArrOfURLs = arrUrlsToReturn exit function end if end function
************ arrOmr = getArrOfURLs(rs("omraade"),"Artikler") if isArray(arrOmr) then Response.Write "<p>Se også:<br>" for i=lbound(arrOmr,2) to ubound(arrOmr,2) Response.Write "<a href="""& arrOmr(1,i) &""" class=""userLink"">» Område: " & arrOmr(0,i) & "</a><br>" Next Response.Write "</p>" end if
fennec -> jeg vil gerne give dig poits som tak for hjælpen med det første, jeg har åbnet en ny vedr. det med funktionen: http://www.eksperten.dk/spm/786108
Men jeg undre mig fortsat over at vi ikke ender med en tom plads. I starten siger vi
Dim arrUrlsToReturn() redim arrUrlsToReturn(1,0)
Det må give et array arrUrlsToReturn(0,0) = "" arrUrlsToReturn(1,0) = ""
Også inden vi fylder data i den første plads laver vi en ny redim - ender vi så ikke med en plads for meget?
Undskyld jeg ikke har svaret før, men jeg har lagt mig syg :(
Synes godt om
Ny brugerNybegynder
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.