Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Thomas Schulte am 30.09.04 - 16:42:13

Titel: Redim Preserve auf Mehrdimensionales Array?
Beitrag von: Thomas Schulte am 30.09.04 - 16:42:13
Hat das irgendeiner von euch schon einmal gemacht?

Irgendwie krieg ich das nicht hin. Bei
Redim Preserve Feldname(i,1) as string
meckert er schon beim Abspeichern das er einen Script Error findet und zwar sagt er "Wrong Number of Array subscripts"

Hab ich glatt vergessen, eine Suche im Notes.net  4+5 sowie 6 Forum fördert da nichts zielführendes zu Tage

Version: 6.5.1, Designer Client
Titel: Re: Redim Preserve auf Mehrdimensionales Array?
Beitrag von: TMC am 30.09.04 - 16:52:28
Was macht er, wenn Du statt i eine Integerzahl direkt reinschreibst (z.B. 5) ?

Nur so zum eingrenzen....
Titel: Re: Redim Preserve auf Mehrdimensionales Array?
Beitrag von: animate am 30.09.04 - 16:54:19
Du kannst bei mehrdimensionalen Arrays nur die Obergrenze der letzten Dimension ändern.
Glaube ich.
Titel: Re: Redim Preserve auf Mehrdimensionales Array?
Beitrag von: koehlerbv am 30.09.04 - 17:00:19
Du glaubst richtig, Thomas V.

Ich kann allerdings nicht nachvollziehen, dass der Compiler schon meckert - bei mir ergibt das erst einen run-time error.

Thomas S.: Was meinst Du eigentlich mit Feldname ?

Bernhard
Titel: Re: Redim Preserve auf Mehrdimensionales Array?
Beitrag von: TMC am 30.09.04 - 17:00:52
Zitat
Arrays can have up to 8 dimensions. The first ReDim statement for an array sets the number of dimensions for the array. Subsequent ReDim statements for the array can change the upper and lower bounds for each dimension, but not the number of dimensions.
If Preserve is specified, you can change only the upper bound of the last array dimension. Attempting to change any other bound results in an error.

Das bestätigt die Aussage von Thomas V.
Titel: Re: Redim Preserve auf Mehrdimensionales Array?
Beitrag von: Thomas Schulte am 30.09.04 - 17:18:02
@bernhard
Der interne Name des Arrays und warum er beim Coplien schon gemeckert hat kann ich jetzt auch nicht mehr nachvollziehen /*Wundert sich*/

@all
Nach ein wenig experimentieren:
Das hier geht nicht da fliegt er mit einem Subscript out of Range auf die Nase
Dim SplitFieldArray() As String
   
Dim i As Integer
Dim j As Integer
   
   
I = 50
Redim SplitfieldArray(i,1) As String
For i = 0 To 40
   splitfieldArray(i,0) = "feld_1 " + Cstr(i)
   splitfieldArray(i,1) = "feld_2 " + Cstr(i)
Next
Redim Preserve SplitfieldArray(i,1) As String

und zwar egal ob i größer oder kleiner oder sonst irgendwas ist.

Wohingegen das hier:
Dim SplitFieldArray() As String

Dim i As Integer
Dim j As Integer
   
I = 50
Redim SplitfieldArray(i,1) As String
For i = 0 To 40
   splitfieldArray(i,0) = "feld_1 " + Cstr(i)
   splitfieldArray(i,1) = "feld_2 " + Cstr(i)
Next
Redim Preserve SplitfieldArray(50,0) As String

Ohne Probleme rauf und runter funkioniert.

Also, Thomas hat recht, wenn man mit mehrdimensionalen Arrays arbeitet, dann kann man immer nur die letzte Dimension ändern, die allerdings rauf wie runter.

Das bedeutet dann fürs Programmieren, das man erst einmal die Anzahl der ersten Dimensionen eines Arrays ermitteln muss und anschließend das Array zweckbestimmt exakt dimensionieren sollte.

Thomas



Titel: Re: Redim Preserve auf Mehrdimensionales Array?
Beitrag von: koehlerbv am 30.09.04 - 17:25:38
Naja, das steht ja auch genauso in der DesignerHelp (der Text ist sogar in R5 und R6 gleich) - siehe das Zitat von Matthias.

Bernhard
Titel: Re: Redim Preserve auf Mehrdimensionales Array?
Beitrag von: Thomas Schulte am 30.09.04 - 17:30:32
Stimmt wer lesen kann ist klar im Vorteil.

Irgendwie war ich jetzt glaube ich auf eine andere Sprache geeicht. deswegen hab ich in der Online Hilfe erst garnicht nachgelesen. Jaja, die Basics.   ::)

Thomas
Titel: Re: Redim Preserve auf Mehrdimensionales Array?
Beitrag von: koehlerbv am 30.09.04 - 17:33:26
Wenn sowas einem guten Programmierer (wie Dir) nicht mehr passiert, ist er tot.
Schlechten Porgrammierern wird das wohl auch noch nach dem Ableben passieren  ;D

Bernhard