Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Lloyd am 24.01.12 - 10:32:01

Titel: Dynamisches zweidimensionales Array
Beitrag von: Lloyd am 24.01.12 - 10:32:01
Hi,
ich habe 2 Fragen zu einem zweidimensionalen Array. Bin mit der Suche und der Hilfe (vielleicht kapier ich das mit dem REDIM nur nicht) im Notes nicht wirlich weitergekommen. Ich benötige ein dynamisches zweidimensionales Array.
Die erste Ebene ist dabei starr (0 To 2), die zweite Ebene soll dynamisch sein.

Meine starre Variante zum testen sieht so aus:

Dim wert(0 To 2, 1 To 30) As String
If ( ........... ) Then
   wert(0, 1) = "Quartal 1, 15)
   wert(0, 2) = "Quartal 1, 29)
End If


Zur Befüllen muss ich aber eine Forall-Schleife durchlaufen und dabei die Zweite Ebene dynamisch halten, da ich nicht weiß wie viele Werte kommen. Kann mir jemand auf die Sprünge helfen wie ich die Zweite Ebene dynamisch aufbauen kann?

Mein Zweites Problem betrifft die Darstellung eines zweidimensionalen Arrays in einer Ansicht. Die Erste Ebene soll dabei ein kategorisierter Wert sein (sprich den man aufklappen kann) und die Zweite Ebene sind die eigentlichen Werte die angezeigt werden sollen. Habt ihr hier einen Ansatz für mich.

Bin für jeden Hinweis dankbar.
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Tode am 24.01.12 - 10:51:21
Dynamisch geht nur eindimensional.

Man könnte sich jetzt so ein Konstrukt ausdenken:

Code
Dim wert() as Variant
Dim innererWert() as String

neueGrösse = 121
Redim wert( neueGrösse ) as Variant
For i = 0 to ubound( wert )
    zweiteDimension = 6
    Redim innererWert( zweiteDimension ) as String
    For j = 0 to ubound( innererWert )
       innererWert( j ) = "DeinString"
    Next j
    wert( i ) = innererWert
Next i

Aber da Du das ganze in einer View willst, würde ich mir gleich von Anfang an überlegen, das in Dokumenten zu speichern: Erste Dimension = Dokument, zweite Dimension = Feldwerte im Dokument
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: ascabg am 24.01.12 - 10:54:31
Hallo,

Soweit ich mich noch erinnere ist es nicht moeglich ein mehrdimensionales Array dynamisch zu deklarieren.

Und einen Array, sei es eindimensional oder auch mehrdimensional, kannst Du nicht in einer Ansicht darstellen.
Hier kannst Du nur Werte darstellen, die in den Feldern der Dokumente gespeichert sind bzw. sich aus diesen
berechnen lassen.


Andreas

@Edit:
Tode war schneller
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: koehlerbv am 24.01.12 - 11:23:18
Nur in einer Sache ein Widerspruch, Andreas: Eindimensionale Arrays kannst Du in Ansichten sehr wohl darstellen, das ist auch ganz üblich (Felder mit Mehrfachwerte-Option).

Bernhard
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: pram am 24.01.12 - 11:36:58
Zitat
Die erste Ebene ist dabei starr (0 To 2), die zweite Ebene soll dynamisch sein.
Da die erste Ebene fest ist, lässt sich die Datenstruktur auch ganz leicht in einem eindimensionalen Array abbilden:
dim arr() as String
...
redim arr(yMax*3+2) as String

index = x + y*3, wobei x zwischen 0 und 2 liegen muss. und y zwischen 0 und yMax

Gruß
Roland
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: TimDom am 24.01.12 - 12:04:04
Hm, ein Auszug aus der Hilfe:

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.

Und wenn ich das hier debugge sieht das auch gut aus:

Code
Dim meinArray() as String

redim meinArray(2, 0)
redim meinArray(2, 1)
redim meinArray(2, 2)
redim meinArray(2, 3)
...

Oder hab ich was missverstanden?
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Lloyd am 24.01.12 - 12:17:07
Hi,
danke schonmal an alle für die Ansätze. So ganz läuft es noch nicht. jedesmal nach dem Redim-Befehl wird der Inhalt des Arrays komplett gelöscht. Ich könnte noch einen kleinen Anschups gebrauchen was ich falsch mache. Ich glaube ich verstehe einfach die Hilfe nicht richtig.

Dim arr() As String
Forall q In quartal
   neueGrösse = neueGrösse + 1
   zahl = Strleft(q,".")
   t_wert = "Quartal 1, " & Cstr(zahl)
            
   Redim arr(0,neueGrösse)
   arr(0,neueGrösse) = t_wert         
            
End Forall
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Peter Klett am 24.01.12 - 12:18:57
Redim Preserve ist Dein Freund
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Lloyd am 24.01.12 - 12:55:43
Ah jetzt ja. Vielen Dank.
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: ascabg am 24.01.12 - 12:56:47
Hallo.

Kann ich mir jetzt doch nicht verkneifen.  ;)

Steht aber alles auch in der Designer-Hilfe beschrieben.


Andreas
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: pram am 24.01.12 - 12:59:16
und ein Redim Preserve ist verhältnismäßig teuer.

Ich würde erst einmal alle Elemente in der Schleife zählen und dann das Array anlegen:
Code
Forall q In quartal
   neueGrösse = neueGrösse + 1    
End Forall

Dim arr() As String
Redim arr(0,neueGrösse) As String ' wichtig Typ wieder angeben

neueGrösse=0
Forall q In quartal
   neueGrösse = neueGrösse + 1    
   zahl = Strleft(q,".")
   t_wert = "Quartal 1, " & Cstr(zahl)
   arr(0,neueGrösse) = t_wert           
End Forall
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Lloyd am 24.01.12 - 13:12:37
Hallo Roland,
danke für den Tipp.
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Lloyd am 26.01.12 - 09:37:04
Hi,
ich muss nochmal bezgl. meiner Zweiten Frage nachbohren.

Das o.g. Array habe ich jetzt komplett aufgebaut nach folgendem Schema.

Quartal 1,10
Quartal 1,24
...
Quartal 2,4
Quartal 2,29
...
Quartal 3,1
Quartal 3,24
...

Wie speichere ich das Array am geschicktesten im Dokument um die Daten nachher in einer Ansicht abfragen zu können. Dabei soll der Erste Wert (Quartal x) kategorisiert sein.
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: pram am 26.01.12 - 10:37:23
Vermutlich in getrennten Feldern und der Option "Mehrfachwerte getrennt anzeigen" (da gibt es einiges zu Beachten, wie man die Sortierungen etc. einstellen muss)

Gruß
Roland
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Tode am 26.01.12 - 10:40:49
Wenn es nicht aus Design- Gründen ein einziges Dokument sein soll, dann würde ich Dir empfehlen, für jedes Quartal ein eigenes Dokument zu machen. Sonst wird es schwierig (bis unmöglich), das in der Ansicht wieder auseinanderzupfrimeln, und wenn Du es schaffst, musst Du doch mit grösseren Einschränkungen in der Freiheit des Ansichts- Designs rechnen...
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Peter Klett am 26.01.12 - 11:00:37
Noch größere Freiheiten hast Du natürlich, wenn Du für jedes Pärchen Quartal/Wert ein eigenes Dokument schreibst. Um beurteilen zu können, ob der Aufwand gerechtfertigt ist, müsste man mehr von der Anwendung wissen.
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Tode am 26.01.12 - 11:21:45
ja, Peter, das wäre natürlich das Optimum, dann hat man jegliche Freiheit bei der Ansichts- Gestaltung...
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Lloyd am 26.01.12 - 12:17:43
Hi,
eigene Dokumente pro Wert scheiden da denke ich aus.

Infos zur Anwendung:

Es handelt sich bei dieser Datenbank um eine Art Todo Übersicht. Sprich in bestimmten Intervallen sind bestimmte Aufgaben zu erledigen und die Intervalle wann für wen was zu tun ist soll in einer Ansicht angezeigt werden. Tägliche/Wöchentliche/Monatliche/Jährliche/Beliebige Zeiträume habe ich hinbekommen, so dass diese absteigend nach Datum in den jeweiligen Ansichten dargestellt werden. Bei Quartalsmäßigen Aufgaben tue ich mich mit der Sortierung in der Ansicht schwer. Hier soll die Erste Kategorie der Name des Quartals sein und die nächste Ebene der Tag im Quartal wann die Aufgabe fällig wird.

-> Quartal 1
   -> 1
   -> 2
   -> 3
-> Quartal 2
   -> 2
   -> 5
   -> 7

Es ist aber möglich in einem Dokument z.B. das Quartal 1 anzuhaken und darunter mehrere Tage. Zusätzlich kann man für Quartal 2 und Quartal 3 ebenfalls mehrere Tage im gleichen Dokument auswählen. Alle ausgewählten "Häckchen" sammel ich beim speichern des Dokuments in einem Array. (z.B. soll auf Filiale x immer zum 01. u. 15. eines jeden ersten Monat im Quartal vom Hausmeister gekehrt werden. Die Sortierung nach den Zahlen ist ja kein Problem, aber hier habe ich halt noch die Ebene drüber das Quartal als Text.

Natürlich gibt es nicht nur eine Aufgabe, sondern für viele Mitarbeiter viele Aufgaben und in allen Aufgabendokumenten kann ich die o.g. Mehrfachwerte belegen.
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Peter Klett am 26.01.12 - 12:29:39
Wenn Du die Kombination aus Quartalen und Tagen so in ein Mehrfachwertefeld schreibst:

Quartal 1\01
Quartal 1\02
Quartal 2\01
Quartal 2\02

usw., kannst Du nach diesem einen Feld die Dokumente kategorisieren. Allerdings hast Du dann auch den Tag als Kategorie und musst den aufklappen. Die Tage musst Du dann auch mit führenden Nullen versehen, damit 2 kleiner als 10 ist, denn das ist dann Text. Damit kannst Du natürlich alles mit einem einzigen Dokument erschlagen.
Titel: Re: Dynamisches zweidimensionales Array
Beitrag von: Lloyd am 26.01.12 - 13:12:21
Danke Peter. Perfekt !!!