Avatar billede mskjoldp Novice
05. april 2005 - 17:18 Der er 17 kommentarer og
1 løsning

array og dic

Hey E

IIS5.0/ASP/IE

Hvordan skaber jeg et array ud fra disse data?

Målet er at lavet et array der er ligesom dette:
Width = Array(45,50,23,23,60,45,45)

kode:
'her hentes fra en db hvilke tal der skal med i arrayet:
strIndhold2 = "1;2;3;4;5;6;7;"

'dic opsættes med tal værdi for hver nr:
Set dic = Server.CreateObject("Scripting.Dictionary")
dic.Add "1", 45
dic.Add "2", 50
dic.Add "3", 23
dic.Add "4", 23
dic.Add "5", 60
dic.Add "6", 45
dic.Add "7", 45

Dim arrWidth, strArray2
'her prøver jeg så på at skabe Width Arrayet:
strArray2 = Split(strIndhold2,",")
for i = 0 to ubound(strArray2)
  Width = dic(strArray2(i))
next

men det fejler når jeg skal udskrive width(i):
<td width="<%=Width(i)%>">bla bla</td>
med fejlen:
Typer stemmer ikke overens i ovenstående linje.

help plz
Avatar billede busschou Praktikant
05. april 2005 - 17:23 #1
spørgsmål
når : strIndhold2 = "1;2;3;4;5;6;7;"
skal: strArray2 = Split(strIndhold2,",")
så ikke være: strArray2 = Split(strIndhold2,";")
Avatar billede busschou Praktikant
05. april 2005 - 17:26 #2
men er det ikke fordi at et array skal defineres med en størrelse?
Width = dic(strArray2(i)) ... vil det ikke bare sætte Width = tallet som dic peger på?
Avatar billede mskjoldp Novice
05. april 2005 - 17:31 #3
nope arrayet skal ikke definere som størrelse.

men som en tal der udgør bredden på <td>

strIndhold2 = "1;2;3;4;5;6;7;"
kan ændre sig efter brugerens behov. dvs at den også godt kan se således ud:
strIndhold2 = "1;2;7;3;4;"

derfor skal jeg koble tallene (fx 1 2 3 osv) til en bestemt talværdi, der så skal bruges som bredden på <td> hvor det udskrives således:

<% for i = 0 to ubound(arrCustom2) - 1%>
    <td class="lodret" width="<%=Width(i)%>" height="79px"><%=(OverskriftAll(arrCustom2(i)))%></td>
<% next %>

ok?
Avatar billede busschou Praktikant
05. april 2005 - 17:34 #4
kan du så ikke gøre sådan her
<% for i = 0 to ubound(arrCustom2) - 1%>
    <td class="lodret" width="<%=dic(i&"")%>" height="79px"><%=(OverskriftAll(arrCustom2(i)))%></td>
<% next %>
Avatar billede busschou Praktikant
05. april 2005 - 17:37 #5
Jeg tror bare at hvis du ikke definerer en Width et sted som fx Dim Width(7)
Så vil det jo ikke være et array
Når du så laver denne her
Width = dic(strArray2(i))
Så vil Width vel bare være den ene værdi?
Som jeg har lært det er Array i asp ikke dynamisk
Avatar billede mskjoldp Novice
05. april 2005 - 17:38 #6
det var et forsøg, men fejlen er :

ADODB.Recordset (0x800A0BB9)
Argumenterne har en forkert type eller er uden for det angivne område, eller der er opstået en konflikt mellem dem.

i linjen med min SQL str.. og den er OK :)

så den holder vist ikke :(

andre forslag?
Avatar billede busschou Praktikant
05. april 2005 - 17:38 #7
Men hvis du ved der er fx max 20 muligheder så kan du jo erklære
Dim Width(20)
og i din løkke kan du så gøre
Width(i) = dic(strArray2(i))
Så burde hver værdi blive indsat i arrayet
Avatar billede mskjoldp Novice
05. april 2005 - 17:58 #8
fejlen Typer stemmer ikke overens opstår.
Jeg tror jeg skal have:

        for i = 0 to ubound(strArray2)
            Width = dic(strArray2(i))
        next
    Width = Array(indholdet)

... ?
Avatar billede plx Nybegynder
05. april 2005 - 18:04 #9
Din oprindelig kode og

<td width="<%=Width%>">bla bla</td>
Avatar billede plx Nybegynder
05. april 2005 - 18:05 #10
og så skal width vel også vokse..

for i = 0 to ubound(strArray2)
  Width = Width + dic(strArray2(i))
next
Avatar billede mskjoldp Novice
05. april 2005 - 18:09 #11
fejlen rykkens ned i <td>:
Typer stemmer ikke overens
ved:
<td class="lodret" width="<%=Width(i)%>" ....>

:(
Avatar billede plx Nybegynder
05. april 2005 - 18:11 #12
Når du sætter (i) siger du at variablen er et array, det er width ikke. Så du skal kun skrive:

<%=Width%>
Avatar billede mskjoldp Novice
05. april 2005 - 18:17 #13
ahh prøver
Avatar billede mskjoldp Novice
05. april 2005 - 18:25 #14
ok . nu løber den gennem uden fejl :)
men

med denne løkke
        strArray2 = Split(strIndhold2,";")
        for i = 0 to ubound(strArray2)
            Width = dic(strArray2(i))
        next

med denne td:
<td class="lodret" width="<%=Width%>"

er bredden ikke korrekt. Bredden er for lille dvs. at den er kun lige så stor som teksten inde i. dvs at dic ikke samles i et array.

med denne løkke
        strArray2 = Split(strIndhold2,";")
        for i = 0 to ubound(strArray2)
            Width = width + dic(strArray2(i))
        next
med denne td:
<td class="lodret" width="<%=Width%>"


bliver Width lagt sammen til en sum så td bliver MEGET bred (300px)

så vi er tilbage hvor tal 1 2 og 3 osv skal have sin egen talværdi der skal passe til 1 2 og 3 osv, som så skal samles i et array...

>80]
Avatar billede busschou Praktikant
06. april 2005 - 10:21 #15
Det er klart
Med den første metode bliver Width sat til den sidste dic(strArray2(i)) i din løkke
I den anden lægger du dem sammen
Prøv
strArray2 = Split(strIndhold2,";")
        for i = 0 to ubound(strArray2)
            Width = width & "," & dic(strArray2(i))
        next
    Width = Split(Width,",")
og så
<td class="lodret" width="<%=Width(i+1)%>"
...'
så må Width blive til en kommaspereret streng for dernæst at blive et array splittet efterkommaerne
Grunden til i+1 er at den første plads vil være tom
Avatar billede busschou Praktikant
06. april 2005 - 10:22 #16
måske er følgende pænere for at holde de store bogstaver store
Width = Width & "," & dic(strArray2(i))
Avatar billede mskjoldp Novice
11. april 2005 - 17:57 #17
busschou .. super ... det virker som tiltænkt. thx fordi du holdt ud :D

svar plz
Avatar billede busschou Praktikant
11. april 2005 - 18:18 #18
et svar :o) og så lidt da
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