Toon posts:

[asp]multidimens.&dynam. array->andere oplossing?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik loop nu tegen het probleem aan dat je in asp (vbscript) van een multidimensionele array alleen het laatste element kan 'redimmen'

bijv:

array(2, 4) -> redim preserver array(4, 4) werkt niet

array(2, 4) -> redim preserver array(2, 8) werkt wel

Ik heb een class 'Error' die (verrassend) errors bevat. Van te voren weet je natuurlijk niet hoeveel errors er kunnen optreden. Hoe kan ik nu op een nette manier implementeren dat deze class een vantevoren onbekend aantal errors kan bevatten?

De structuur van de array zou de volgende moeten zijn:

errors(0)(1) = "errorNr1"
errors(0)(2) = "errorMsg1"
errors(0)(3) = "errorSource1"
errors(0)(4) = "lineNr1"

errors(1)(1) = "errorNr2"
errors(1)(2) = "errorMsg2"
errors(1)(3) = "errorSource2"
errors(1)(4) = "lineNr2"

etc...

Bestaat er misschien een bepaald com-object die dit wel kan bewerkstelligen?

  • UniCache2
  • Registratie: Januari 2001
  • Laatst online: 02-03 09:30
Kan het niet zo:

Redim Preserve errors(3, 0)

errors(0)(0) = "errorNr1"
errors(1)(0) = "errorMsg1"
errors(2)(0) = "errorSource1"
errors(3)(0) = "lineNr1"

Redim Preserve errors(3, 1)

errors(0)(1) = "errorNr2"
errors(1)(1) = "errorMsg2"
errors(2)(1) = "errorSource2"
errors(3)(1) = "lineNr2"

Redim Preserve errors(3, 2)

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Volgens mij hoort 't ook zo. De 2e is het aantal rijen, de eerste index het aantal kolommen, en die kan je natuurlijk niet meer aanpassen.

Verwijderd

Topicstarter
heb ik geprobeerd, maar krijg steeds een Subscript out of range: 'errors' error...

geef mij maar php ;(

Verwijderd

Bestaat er misschien een bepaald com-object die dit wel kan bewerkstelligen?
Je zou het met een Dictionairy object kunnen proberen.

http://www.devguru.com/technologies/vbscript/quickref/dictionary.html

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Dan doe je iets niet goed. Post 's wat code. :P

Geef mij maar asp. :D

  • UniCache2
  • Registratie: Januari 2001
  • Laatst online: 02-03 09:30
Dit is de correcte code, met (getal, getal) !

<%@ Language="VBScript" %>
<%
Redim Preserve errors(3, 0)

errors(0,0) = "errorNr1"
errors(1,0) = "errorMsg1"
errors(2,0) = "errorSource1"
errors(3,0) = "lineNr1"

Redim Preserve errors(3, 1)

errors(0,1) = "errorNr2"
errors(1,1) = "errorMsg2"
errors(2,1) = "errorSource2"
errors(3,1) = "lineNr2"

Redim Preserve errors(3, 2)
%>

Verwijderd

Topicstarter
dim bla()

redim preserve bla(1, 1)

bla(0)(0) = "bla"

Microsoft VBScript runtime (0x800A0009)
Subscript out of range

poging 2

dim bla(1, 0)

redim preserve bla(1, 1)

bla(0)(0) = "bla"

Microsoft VBScript runtime (0x800A000A)
This array is fixed or temporarily locked

  • UniCache2
  • Registratie: Januari 2001
  • Laatst online: 02-03 09:30
De correcte code staat 1 reply boven dit bericht!
Op dinsdag 08 januari 2002 09:32 schreef Mas*Mind het volgende:
dim bla()

redim preserve bla(1, 1)

bla(0)(0) = "bla"

Microsoft VBScript runtime (0x800A0009)
Subscript out of range

poging 2

dim bla(1, 0)

redim preserve bla(1, 1)

bla(0)(0) = "bla"

Microsoft VBScript runtime (0x800A000A)
This array is fixed or temporarily locked

Verwijderd

Topicstarter
Op dinsdag 08 januari 2002 09:32 schreef UniCache2 het volgende:
Dit is de correcte code, met (getal, getal) !
|:(
<%@ Language="VBScript" %>
<%

....

%>
thnx, dat werkt idd :)

Verwijderd

Topicstarter
vaag, in een standalone testscript werkt het, maar zodra ik het in m'n class plak werkt het nog steeds niet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Error
    public errors(3, 0), nrOfErrors
    
    public sub init()
        nrOfErrors = 0
    end sub
    
    public sub addError(nr, msg, src, linenr)
        errors(0, nrOfErrors) = nr
        errors(1, nrOfErrors) = nr
        errors(2, nrOfErrors) = nr
        errors(3, nrOfErrors) = nr
        
        nrOfErrors = nrOfErrors+1
        
        redim preserve errors(3, nrOfErrors)
    end sub
    
end class

set myError = new Error
myError.init

myError.addError(12, "bla", "", "")
myError.addError(12, "bla", "", "")
myError.addError(12, "bla", "", "")
myError.addError(12, "bla", "", "")

Microsoft VBScript runtime (0x800A000A)
This array is fixed or temporarily locked

Misschien toch maar eens naar dat dictionary object kijken...

  • UniCache2
  • Registratie: Januari 2001
  • Laatst online: 02-03 09:30
Er gaat iets niet goed met de init, als je hierna namenlijk nrOfErrors uitschrijft zie je dat die Null is:

..
myError.init
Response.Write nrOfErrors & "|"

Verwijderd

Topicstarter
Op dinsdag 08 januari 2002 09:54 schreef UniCache2 het volgende:
Er gaat iets niet goed met de init, als je hierna namenlijk nrOfErrors uitschrijft zie je dat die Null is:

..
myError.init
Response.Write nrOfErrors & "|"
niet zo gek, je moet wel refereren naar nrOfErrors van myError:

Response.Write myError.nrOfErrors & "|"

Verwijderd

Beetje offline eigenlijk, maar:
Waarom implementeer je het zo? Want als je web-server down gaat ben je al je errors weer kwijt, en kan je opnieuw beginnen! Of mis ik wat :?
Ik zou ook ipv een array een dictionary gebruiker, zoals Scimitar al aangeeft, dan werkt veel makkelijker. Je kan namelijk je code ook tamelijk makkelijk omschrijven, je maakt een klasse (of type) myError, en die gooi je op de dictionary, met bv. als key '"a" & nErrNo'. Dan kan je dat makkelijk terugvinden...

Verwijderd

Topicstarter
Op dinsdag 08 januari 2002 10:09 schreef KoenM het volgende:
Beetje offline eigenlijk, maar:
Waarom implementeer je het zo? Want als je web-server down gaat ben je al je errors weer kwijt, en kan je opnieuw beginnen! Of mis ik wat :?
Het zijn runtime errors, ze hoeven niet behouden te worden.
Ik zou ook ipv een array een dictionary gebruiker, zoals Scimitar al aangeeft, dan werkt veel makkelijker. Je kan namelijk je code ook tamelijk makkelijk omschrijven, je maakt een klasse (of type) myError, en die gooi je op de dictionary, met bv. als key '"a" & nErrNo'. Dan kan je dat makkelijk terugvinden...
Ik ben al een beetje aan het vogelen met dat dictionary object, maar zou toch nog graag willen weten wat er met bovenstaand nou fout zit. In theorie zou het moeten werken nl

Verwijderd

Topicstarter
dat dictionairy object is blijkbaar ook net niet wat ik zoek; Je kan er blijkbaar wel objecten instoppen maar er niet uithalen... Iemand die me dus een duwtje in de goede richting kan geven?

het gaat erom dat ik een volgende structuur wil krijgen:

errors
---error1
------nr
------msg
------src
------linenr
---error2
------nr
------msg
------src
------linenr
---error2
------nr
------msg
------src
------linenr

etc..etc..

Wat ik dus geprobeerd heb om het dictionairy 'errors' te vullen met andere dictionary objecten die dan weer de keys 'nr', 'msg', 'src' en 'linenr' bevatten. Het invoegen ging zonder foutmelding, maar op 1 of andere manier kan ik de dictionaries er niet meer uithalen...

Verwijderd

Op dinsdag 08 januari 2002 14:11 schreef Mas*Mind het volgende:
dat dictionairy object is blijkbaar ook net niet wat ik zoek; Je kan er blijkbaar wel objecten instoppen maar er niet uithalen... Iemand die me dus een duwtje in de goede richting kan geven?

het gaat erom dat ik een volgende structuur wil krijgen:

errors
---error1
------nr
------msg
------src
------linenr
---error2
------nr
------msg
------src
------linenr
---error2
------nr
------msg
------src
------linenr

etc..etc..

Wat ik dus geprobeerd heb om het dictionairy 'errors' te vullen met andere dictionary objecten die dan weer de keys 'nr', 'msg', 'src' en 'linenr' bevatten. Het invoegen ging zonder foutmelding, maar op 1 of andere manier kan ik de dictionaries er niet meer uithalen...
Maak een class van je error (nr, msg, src, linenr) en voeg deze in je array toe (1-dimensionaal), dus iets als:
code:
1
2
3
Set Errors(1) = New errObject
Errors(1).nr = e.Number
Errors(1).Msg = e.Message

Verwijderd

Topicstarter
opgelost...:

class Error
public errors(3, 0), nrOfErrors

public sub init()
nrOfErrors = 0
redim preserve errors(3, 0)
end sub

public sub addError(nr, msg, src, linenr)
errors(0, nrOfErrors) = nr
errors(1, nrOfErrors) = nr
errors(2, nrOfErrors) = nr
errors(3, nrOfErrors) = nr

nrOfErrors = nrOfErrors+1

redim preserve errors(3, nrOfErrors)
end sub

end class

  • UniCache2
  • Registratie: Januari 2001
  • Laatst online: 02-03 09:30
Dat zeg ik, er gaat iets fout bij init() ;) ;) ;)
Op dinsdag 08 januari 2002 15:22 schreef Mas*Mind het volgende:
opgelost...:

class Error
public errors(3, 0), nrOfErrors

public sub init()
nrOfErrors = 0
redim preserve errors(3, 0)
end sub

public sub addError(nr, msg, src, linenr)
errors(0, nrOfErrors) = nr
errors(1, nrOfErrors) = nr
errors(2, nrOfErrors) = nr
errors(3, nrOfErrors) = nr

nrOfErrors = nrOfErrors+1

redim preserve errors(3, nrOfErrors)
end sub

end class
Pagina: 1