|
| Dynamisk erklæring af dimension på array Fra : Jesper Stocholm |
Dato : 13-03-02 14:35 |
|
Jeg vil gerne kunne gøre følgende:
dim int1,int2
int1 = 10
int2 = 20
Dim Ar1(int1,int2)
Men det kan jeg ikke få lov til. Den brokker sig over:
Microsoft VBScript compilation (0x800A0402)
Expected integer constant
/debat/defaultNNTP.asp, line 25, column 15
dim arMsgTotal(intBndAr,5)
Min kode er :
arMsg = split(strNNTP,VbCrLf)
intBndAr = cint(ubound(arMsg))
dim arMsgTotal(intBndAr,5)
Hvis jeg udskriver variablen intBndAr, så er den 27 ... så det er korrekt
nok et heltal.
Kan man ikke det jeg gerne vil ... eller ? Hvis jeg manuelt indsætter
tallet 27 på intBndAr's plads, så virker det fint ...
--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|
| |
Peter Lykkegaard (13-03-2002)
| Kommentar Fra : Peter Lykkegaard |
Dato : 13-03-02 15:33 |
|
"Jesper Stocholm" <spam200203@stocholm.dk> wrote in message
news:Xns91D0946044794spamstocholmdk@130.226.1.34...
> Jeg vil gerne kunne gøre følgende:
>
> dim int1,int2
> int1 = 10
> int2 = 20
>
> Dim Ar1(int1,int2)
>
> Men det kan jeg ikke få lov til. Den brokker sig over:
>
> Microsoft VBScript compilation (0x800A0402)
> Expected integer constant
^^^^^^
Pøve at kikke på VBscripts execute metode
mvh/Peter Lykkegaard
| |
Stuffy (13-03-2002)
| Kommentar Fra : Stuffy |
Dato : 13-03-02 16:05 |
| | |
Peter Lykkegaard (13-03-2002)
| Kommentar Fra : Peter Lykkegaard |
Dato : 13-03-02 19:50 |
|
"Stuffy" <abuse@hotmail.com> wrote in message
news:IUJj8.112$NH3.2270@news.get2net.dk...
> > Microsoft VBScript compilation (0x800A0402)
> > Expected integer constant
> > /debat/defaultNNTP.asp, line 25, column 15
> > dim arMsgTotal(intBndAr,5)
>
> Præcis samme problem jeg havde tidligere.
> Se følgende tråd emd 12 svar:
>
>
http://groups.google.com/groups?hl=en&threadm=bo%2535.65%24rV.1385%40news.ge
> t2net.dk&rnum=1&prev=/groups%3Fq%3Ddynamisk%2Barray%2Bjimmy%26hl%3Den
>
Det var dog en værre gang ævl (undskyld udtykket
Metoden execute vil kunne klare den lille sag
Execute "dim arMsgTotal(" & intBndAr & ",5)"
Eller
Execute "DIM MitArray1 (" & NR & ")"
Som er svaret på dit spørgsmål
mvh/Peter Lykkegaard
--
Der mener VBScript er et stærkt sprog - hvis man har færdighederne...
Citat frit fra http://www.vb2themax.com
| |
Allan Ebdrup (20-03-2002)
| Kommentar Fra : Allan Ebdrup |
Dato : 20-03-02 10:31 |
|
"Peter Lykkegaard" <polonline@hot.mail.com> wrote in message
news:B1Nj8.152$NH3.3156@news.get2net.dk...
> "Stuffy" <abuse@hotmail.com> wrote in message
> news:IUJj8.112$NH3.2270@news.get2net.dk...
[Klip - dynamisk dimensionering af array]
> > Præcis samme problem jeg havde tidligere.
> > Se følgende tråd emd 12 svar:
> >
>
http://groups.google.com/groups?hl=en&threadm=bo%2535.65%24rV.1385%40news.ge
> > t2net.dk&rnum=1&prev=/groups%3Fq%3Ddynamisk%2Barray%2Bjimmy%26hl%3Den
> >
> Det var dog en værre gang ævl (undskyld udtykket
>
> Metoden execute vil kunne klare den lille sag
>
> Execute "dim arMsgTotal(" & intBndAr & ",5)"
> Eller
> Execute "DIM MitArray1 (" & NR & ")"
>
> Som er svaret på dit spørgsmål
Ahhh Peter
Det er nok en sandhed med modifikationer, og ævl er det ihvertfald ikke
(selvom der er noget imellem, og ikke alle indlæg er lige godt skrevet).
Execute metoden er kendt for:
- At være svær at forstå for nybegyndere
- At være svær at læse
- At have dårlig performance
Du tvinger jo din fortolker til at parse noget kode "to" gange, og så
opretter du konstanter mens koden kører, hvilket VBScript ikke er gearet
til. Jeg ville klart vælge metoden beskrevet i debattråden som "Stuffy"
henviser til, som med udgangspunkt i den oprindelige spørges kode ville
blive til:
dim int1, int2, Ar1()
int1 = 10
int2 = 20
Redim Ar1(int1, int2)
Som er et muligt svar på spørgsmålet
MVH
Allan Ebdrup
Messageboard: http://www.aspfastforum.com/aspfastforum/
| |
Jakob Andersen (20-03-2002)
| Kommentar Fra : Jakob Andersen |
Dato : 20-03-02 11:36 |
|
"Allan Ebdrup" <ebdrup@ti-fire.dk> skrev i en meddelelse
news:a79kqt$221g$1@news.cybercity.dk...
> dim int1, int2, Ar1()
> int1 = 10
> int2 = 20
> Redim Ar1(int1, int2)
> Som er et muligt svar på spørgsmålet
Men den bedste løsning er stadig at overdimensionere arrayet.
--
Jakob Andersen
| |
Allan Ebdrup (20-03-2002)
| Kommentar Fra : Allan Ebdrup |
Dato : 20-03-02 19:14 |
|
"Jakob Andersen" <jakob@effectus.dk> wrote in message
news:a79omp$2cb$1@sunsite.dk...
> "Allan Ebdrup" <ebdrup@ti-fire.dk> skrev i en meddelelse
> news:a79kqt$221g$1@news.cybercity.dk...
> > dim int1, int2, Ar1()
> > int1 = 10
> > int2 = 20
> > Redim Ar1(int1, int2)
> > Som er et muligt svar på spørgsmålet
>
> Men den bedste løsning er stadig at overdimensionere arrayet.
Hej Jacob
Det mener jeg nu ikke nødvendigvis altid er rigtigt, performancemæssigt
koster det ikke ret meget at redimme et array, så længe man ikke redimmer
det ofte, fx i et loop, og så længe at man ikke bruger "Preserve" når man
redimmer. Derudover slipper du for at din applikation pludseligt går ned
fordi du ikke har overdimensioneret dit array nok, og du behøver ikke
seperat "bogføring" for at holde rede på hvor meget af dit array du har
brugt.
MVH
Allan Ebdrup
| |
Jakob Andersen (21-03-2002)
| Kommentar Fra : Jakob Andersen |
Dato : 21-03-02 09:36 |
|
"Allan Ebdrup" <ebdrup@ti-fire.dk> wrote in message
news:a7aje7$to2$1@news.cybercity.dk...
> Det mener jeg nu ikke nødvendigvis altid er rigtigt, performancemæssigt
> koster det ikke ret meget at redimme et array, så længe man ikke redimmer
> det ofte, fx i et loop, og så længe at man ikke bruger "Preserve" når man
> redimmer.
Det kan du have ret i, men det er som oftest i et loop at der er behov
udvidelse af et array.
--
Jakob Andersen
| |
Jørn Andersen (21-03-2002)
| Kommentar Fra : Jørn Andersen |
Dato : 21-03-02 15:25 |
|
On Thu, 21 Mar 2002 09:35:51 +0100, "Jakob Andersen"
<jakob@effectus.dk> wrote:
>Det kan du have ret i, men det er som oftest i et loop at der er behov
>udvidelse af et array.
Men her er der så igen forskel på, om man udvider array'et med én for
hver gang man genmløber loopen og tester - eller om man tester og så
udvider med 20 eller 50, hvis det er nødvendigt. I sidstnævnte
tilfælde er belastningen vist begrænset.
Mvh. Jørn
--
Jørn Andersen,
Brønshøj
| |
Jakob Andersen (21-03-2002)
| Kommentar Fra : Jakob Andersen |
Dato : 21-03-02 16:15 |
|
"Jørn Andersen" <jorn@jorna.dk> wrote in message
news:s4rj9u0uiqrnle6o9t0ivfiej4uivrppit@4ax.com...
> Men her er der så igen forskel på, om man udvider array'et med én for
> hver gang man genmløber loopen og tester - eller om man tester og så
> udvider med 20 eller 50, hvis det er nødvendigt. I sidstnævnte
> tilfælde er belastningen vist begrænset.
Og dette er så overdimensioneringen, som jeg nævnte
--
Jakob Andersen
| |
Jørn Andersen (21-03-2002)
| Kommentar Fra : Jørn Andersen |
Dato : 21-03-02 16:29 |
|
On Thu, 21 Mar 2002 16:14:47 +0100, "Jakob Andersen"
<jakob@effectus.dk> wrote:
>> Men her er der så igen forskel på, om man udvider array'et med én for
>> hver gang man genmløber loopen og tester - eller om man tester og så
>> udvider med 20 eller 50, hvis det er nødvendigt. I sidstnævnte
>> tilfælde er belastningen vist begrænset.
>
>Og dette er så overdimensioneringen, som jeg nævnte
Exactly - men en kontrolleret overdimensionering, som ikke fejler,
fordi man hvade underdimensioneret overdimensioneringen :)
Mvh. Jørn
--
Jørn Andersen,
Brønshøj
| |
Allan Ebdrup (21-03-2002)
| Kommentar Fra : Allan Ebdrup |
Dato : 21-03-02 18:58 |
|
"Jakob Andersen" <jakob@effectus.dk> wrote in message
news:a7ctaa$1cn2$1@news.cybercity.dk...
> "Jørn Andersen" <jorn@jorna.dk> wrote in message
> news:s4rj9u0uiqrnle6o9t0ivfiej4uivrppit@4ax.com...
> > Men her er der så igen forskel på, om man udvider array'et med én for
> > hver gang man genmløber loopen og tester - eller om man tester og så
> > udvider med 20 eller 50, hvis det er nødvendigt. I sidstnævnte
> > tilfælde er belastningen vist begrænset.
>
> Og dette er så overdimensioneringen, som jeg nævnte
Hej Jacob
Hvis vi rigtigt skal fluekneppe så vil jeg nu ikke mene det hører ind under
begrebet "overdimensionering", det er rigtigt at man lokalt i algoritmen har
en dimension der er større en det nødvendige, men det vigtige er at man kan
garantere at alt pladsen er brugt når man er færdig med algoritmen.
Du kalder det jo heller ikke overdimensionering fordi du dimmer en variabel
10 linere før du bruger den , og i princippet har du erklæret en variabel
som du ikke bruger i 10 kodelinier og det må vel høre ind under din
definition af overdimensionering, det tror jeg vil forvirre de fleste. (med
lidt god vilje kunne man kalde det for "temporær lokal overdimensionering"
eller blot lokal eller temporær)
Nej overdimensionering må være når man ikke ved hvor meget plads man skal
bruge og man løser det ved bare at tage "nok", men samtidig risikerer at
tage "for meget" dvs. tage plads der aldrig bliver brugt.
MVH
Allan "los flueknepper" Ebdrup
| |
Peter Lykkegaard (22-03-2002)
| Kommentar Fra : Peter Lykkegaard |
Dato : 22-03-02 17:43 |
|
"Allan Ebdrup" <ebdrup@ti-fire.dk> wrote in message
news:a7d6s3$1qnc$1@news.cybercity.dk...
> Hvis vi rigtigt skal fluekneppe...
Hmm, hvorfor ikke bruge dictionary objectet i stedet for arrays?
mvh/Peter Lykkegaard
| |
Allan Ebdrup (23-03-2002)
| Kommentar Fra : Allan Ebdrup |
Dato : 23-03-02 12:50 |
|
"Peter Lykkegaard" <polonline@hot.mail.com> wrote in message
news:d0Jm8.66$JU5.3037@news.get2net.dk...
> "Allan Ebdrup" <ebdrup@ti-fire.dk> wrote in message
> news:a7d6s3$1qnc$1@news.cybercity.dk...
>
> > Hvis vi rigtigt skal fluekneppe...
>
> Hmm, hvorfor ikke bruge dictionary objectet i stedet for arrays?
Hvis rækkefølgen af elementerne er vigtig er det umuligt at bruge et
dictionary.
Derudover er det tit overkill at bruge et dictionary, det koster noget at
instantiere og senere frigive et objekt.
MVH
Allan
| |
Peter Lykkegaard (25-03-2002)
| Kommentar Fra : Peter Lykkegaard |
Dato : 25-03-02 07:45 |
|
"Allan Ebdrup" <ebdrup@ti-fire.dk> wrote in message
news:a7hq1t$s3h$1@news.cybercity.dk...
> "Peter Lykkegaard" <polonline@hot.mail.com> wrote in message
> news:d0Jm8.66$JU5.3037@news.get2net.dk...
> > "Allan Ebdrup" <ebdrup@ti-fire.dk> wrote in message
> > news:a7d6s3$1qnc$1@news.cybercity.dk...
> >
> > > Hvis vi rigtigt skal fluekneppe...
> >
> > Hmm, hvorfor ikke bruge dictionary objectet i stedet for arrays?
>
> Hvis rækkefølgen af elementerne er vigtig er det umuligt at bruge et
> dictionary.
?? - Du kan jo definere din key som du vil
> Derudover er det tit overkill at bruge et dictionary, det koster noget at
> instantiere og senere frigive et objekt.
>
Det var set i forhold til redim?
mvh/Peter Lykkegaard
| |
Allan Ebdrup (30-03-2002)
| Kommentar Fra : Allan Ebdrup |
Dato : 30-03-02 15:59 |
|
"Peter Lykkegaard" <polonline@hot.mail.com> wrote in message
news:byzn8.6$WK1.314@news.get2net.dk...
> "Allan Ebdrup" <ebdrup@ti-fire.dk> wrote in message
> news:a7hq1t$s3h$1@news.cybercity.dk...
> > "Peter Lykkegaard" <polonline@hot.mail.com> wrote in message
> > news:d0Jm8.66$JU5.3037@news.get2net.dk...
> > > "Allan Ebdrup" <ebdrup@ti-fire.dk> wrote in message
> > > news:a7d6s3$1qnc$1@news.cybercity.dk...
> > >
> > > > Hvis vi rigtigt skal fluekneppe...
> > >
> > > Hmm, hvorfor ikke bruge dictionary objectet i stedet for arrays?
> >
> > Hvis rækkefølgen af elementerne er vigtig er det umuligt at bruge et
> > dictionary.
>
> ?? - Du kan jo definere din key som du vil
Ja jeg kom godt til at tænke på at "umuligt" var et for stærkt ord, men der
havde jeg trykket på send.
Men det er da forvirrende kode at bruge et dictionary som et array når man
nu har et array, og koden bliver "mærkelig", enhver vil tænke "hvorfor
bruges der ikke et array", hele pointen med et dictionary er jo at det
virker som en mængde, og hele pointen med et array er at det er en liste.
> > Derudover er det tit overkill at bruge et dictionary, det koster noget
at
> > instantiere og senere frigive et objekt.
> >
> Det var set i forhold til redim?
Det er stadig dyrt at bruge objekter, specielt når man bruger dem til at
erstatter indbyggede typer, jeg tror stadig at et enkelt dynamisk redim af
et array giver bedre performance end at bruge et dictionary, specielt for
små størrelser. Men vigtigst er at det er forvirrende. Man implementerer jo
heller ikke et dictionary i en array, selvom det sagtens kan lade sig gøre.
Fred være med det hvis du synes det er godt, man kan da få det til at virke,
jeg ville nok sørge for at nogle gode kommentare i koden hvis andre skal se
den.
MVH
Allan
| |
Peter Lykkegaard (21-03-2002)
| Kommentar Fra : Peter Lykkegaard |
Dato : 21-03-02 08:14 |
|
"Allan Ebdrup" <ebdrup@ti-fire.dk> wrote in message
news:a79kqt$221g$1@news.cybercity.dk...
> Det er nok en sandhed med modifikationer, og ævl er det ihvertfald ikke
> (selvom der er noget imellem, og ikke alle indlæg er lige godt skrevet).
Min (noget hurtige) gav mig det indtryk at man (igen) gav M$ skylden for en
dårlig implementering, snarere end accepterede at et givent sprog på et
given stade har de begrænsninger der nu en gang er - når det nu kan lade sig
gøre - imho
- Med fare for at starte en religionskrig
> Execute metoden er kendt for:
> - At være svær at forstå for nybegyndere
> - At være svær at læse
> - At have dårlig performance
(..)
> Redim Ar1(int1, int2)
>
Prøv at sammenligne performance of redim og brugen af execute...
Og ja - execute er ikke for den ukyndige
Jeg bruger den selv i et proprietært system, hvor jeg laver nogle checks før
jeg opretter objekter i VBScript
Jeg kunne selvfølgelig gentage den samme kode flere gange (én for hvert
objekt)
Men læsbarhed og maintainability falder noget
Og nej jeg har ikke oplevet de store ændringer mht performance
Men det skal da være genstand for en hurtig test
Muligvis har ASP fortolkeren nogle problemer i den retning du beskriver?
mvh/Peter Lykkegaard
| |
|
|