Avatar billede nil.dk Nybegynder
21. november 2001 - 11:24 Der er 15 kommentarer og
1 løsning

Array-trouble

Jeg fylder data dynamisk i et array ved ar bruge vbscripts split-funktion på et databasefelt med en længere tekst.

Do While Not res.EOF
    data = Split(res(\"elemarg\"),\" \",-1,1)
    res.MoveNext
Loop

Dvs at jeg ikke ved hvor mange data der kommer i arrayet. Hvis jeg senere vil tilføje flere data (igen med en Split) til dette array, hvordan gør jeg så det uden at overskrive de allerede tilstedeværende?
Avatar billede nute Nybegynder
21. november 2001 - 11:30 #1
hmmm....hvis du kun skal legge til data i ditt array, så skal du benytte

ReDim preserve data(nylengde)

er jeg galt på den ?
Avatar billede nil.dk Nybegynder
21. november 2001 - 11:39 #2
Men jeg kender jo ikke den nye længde
Avatar billede nute Nybegynder
21. november 2001 - 11:42 #3
joda...du setter en UBOUND på den array du får fra din split

fx

ReDim preserve data( UBOUND(Split(res(\"elemarg\"),\" \",-1,1) ) )

/nute
Avatar billede nil.dk Nybegynder
21. november 2001 - 11:47 #4
Vil du hjælpe mig i gang hvis du lige får lidt kode?

______________________________________________

Set res = Server.CreateObject(\"ADODB.Recordset\")
sql = \"SELECT elemarg FROM pageelements WHERE pageidx = \" & pageid & \" ORDER BY elemprio\"
res.Open sql, ado, 3, 1

Do While Not res.EOF
    data = Split(res(\"elemarg\"),\" \",-1,1)
    res.MoveNext
Loop
Avatar billede nil.dk Nybegynder
21. november 2001 - 11:48 #5
Formålet er at lave et array med alle ord fra alle felterne der kommer ud af sql-selecten. Som den er nu overskriver hvert loop den forrige.
Avatar billede nute Nybegynder
21. november 2001 - 11:53 #6
oki...jeg tror jeg forstår hva du mener, men jeg villige ha et par ting på plass

- den array du har postet...er det en globalt tilgjengelig array for scriptet ?

hvis ja:

- du utfører en annen SQL-select senere i scriptet som du gjerne vil proppe inn i samme array ?

/nute
Avatar billede nil.dk Nybegynder
21. november 2001 - 11:55 #7
jeg er ikke sikker på hvad du mener med globalt tilgængelig..

Nej... det er den samme select....
Avatar billede nute Nybegynder
21. november 2001 - 11:58 #8
globalt tilgjengelig: at det er en array hvis innhold er tilgjengelig for alle funksjoner i ditt script...

siden det er samme select:

ligger det allerede noe innhold i \'data\' arrayet idet du eksekverer denne SQL ?
Avatar billede nil.dk Nybegynder
21. november 2001 - 12:27 #9
nej intet andet.
Avatar billede nute Nybegynder
21. november 2001 - 12:48 #10
ahhh....unnskyld....jeg leser ikke ditt spm ordentlig :-(

a) det du ønsker er å opprette en array som du he´le tiden legger nye elemeter inn i. Dvs at hvis ditt recordsets første record innehold \"Jeg er norsk\" så legger du verdien \"Jeg\" inn i første index i ditt array, \"er\" i andre index og \"norsk\" i tredje index. Deretter hvis ditt recordsets andre record inneholder \"Du er dansk\", så legger du verdien \"Du\" i fjerde index i ditt array, \"er\" i femte index osv

eller

b) du oppretter en array som har lik lengde som ditt recordset, og hver index i din array inneholder en array med ordene fra ditt record ?

Avatar billede nil.dk Nybegynder
21. november 2001 - 12:54 #11
A! Lige præcis :o)
Avatar billede nute Nybegynder
21. november 2001 - 13:05 #12
AHA !!!! så begynner vi å nærme oss :-D

prøv dette:

Set res = Server.CreateObject(\"ADODB.Recordset\")
sql = \"SELECT elemarg FROM pageelements WHERE pageidx = \" & pageid & \" ORDER BY elemprio\"
res.Open sql, ado, 3, 1


Do While Not res.EOF
    tmpStr = Join( data, \" \" ) & \" \" & res(\"elemarg\")
    data = Split( tmpStr ,\" \",-1,1)
    res.MoveNext
Loop

alternativt kan du vel bare legge alt i en streng som du propper ned i et array til sist (som nok er den mest økonomiske måten)

tmpStr = \"\"
Do While Not res.EOF
    tmpStr = tmpString & \" \" & TRIM( res(\"elemarg\") )
    res.MoveNext
Loop
data = Split( tmpStr ,\" \",-1,1)

/nute
Avatar billede nil.dk Nybegynder
21. november 2001 - 13:15 #13
nute >> You saved my day once again :o)
Avatar billede nute Nybegynder
21. november 2001 - 13:20 #14
det var da så lidt :) bare hyggelig å kunne hjelpe...
Avatar billede soerens Nybegynder
21. november 2001 - 13:55 #15
DOH!

Det skulle jeg lige til at foreslå, men så var der en kunde der ringede....

Det er sgu\' med at være hurtig herinde på Eksperten ;-)

/SoerenS
Avatar billede nil.dk Nybegynder
21. november 2001 - 21:10 #16
Søren >> Forhåbentlig fik du mere ud af at snakke med kunden end de 60 points nute fik ud af at hjælpe mig ;o)
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