Autor Thema: Dynamisches zweidimensionales Array  (Gelesen 3558 mal)

Offline Lloyd

  • Aktives Mitglied
  • ***
  • Beiträge: 211
Dynamisches zweidimensionales Array
« 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.
« Letzte Änderung: 24.01.12 - 10:50:03 von Lloyd »
Gruss
Lloyd

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Dynamisches zweidimensionales Array
« Antwort #1 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
« Letzte Änderung: 24.01.12 - 10:53:40 von Tode »
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Dynamisches zweidimensionales Array
« Antwort #2 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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Dynamisches zweidimensionales Array
« Antwort #3 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

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Dynamisches zweidimensionales Array
« Antwort #4 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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

TimDom

  • Gast
Re: Dynamisches zweidimensionales Array
« Antwort #5 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?

Offline Lloyd

  • Aktives Mitglied
  • ***
  • Beiträge: 211
Re: Dynamisches zweidimensionales Array
« Antwort #6 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
Gruss
Lloyd

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Dynamisches zweidimensionales Array
« Antwort #7 am: 24.01.12 - 12:18:57 »
Redim Preserve ist Dein Freund

Offline Lloyd

  • Aktives Mitglied
  • ***
  • Beiträge: 211
Re: Dynamisches zweidimensionales Array
« Antwort #8 am: 24.01.12 - 12:55:43 »
Ah jetzt ja. Vielen Dank.
Gruss
Lloyd

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Dynamisches zweidimensionales Array
« Antwort #9 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

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Dynamisches zweidimensionales Array
« Antwort #10 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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Lloyd

  • Aktives Mitglied
  • ***
  • Beiträge: 211
Re: Dynamisches zweidimensionales Array
« Antwort #11 am: 24.01.12 - 13:12:37 »
Hallo Roland,
danke für den Tipp.
Gruss
Lloyd

Offline Lloyd

  • Aktives Mitglied
  • ***
  • Beiträge: 211
Re: Dynamisches zweidimensionales Array
« Antwort #12 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.
Gruss
Lloyd

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Dynamisches zweidimensionales Array
« Antwort #13 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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Dynamisches zweidimensionales Array
« Antwort #14 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...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Dynamisches zweidimensionales Array
« Antwort #15 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.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Dynamisches zweidimensionales Array
« Antwort #16 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...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Lloyd

  • Aktives Mitglied
  • ***
  • Beiträge: 211
Re: Dynamisches zweidimensionales Array
« Antwort #17 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.
Gruss
Lloyd

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Dynamisches zweidimensionales Array
« Antwort #18 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.

Offline Lloyd

  • Aktives Mitglied
  • ***
  • Beiträge: 211
Re: Dynamisches zweidimensionales Array
« Antwort #19 am: 26.01.12 - 13:12:21 »
Danke Peter. Perfekt !!!
Gruss
Lloyd

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz