Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: ReinerB am 06.10.05 - 16:53:18
-
Hallo Forum,
wie kann ich denn auf ein nicht indexiertes Array abfragen?
Dim liste() As String
Später mache ich je nach Code einen Redim oder auch nicht. Wenn ich keinen Redim mache, wie kann ich dann abfragen, ob das Array leer ist?
IsEmpty hilft nicht, Ubound führt zu Fehler.
Was bleibt noch?
Danke für eure Hilfe. Ich verzweifel noch!!
Gruß
Reiner
-
Bevor Du mit UBound die obere Grenze bestimmen kannst, könntest Du mit IsArray zuerst prüfen ob es überhaupt ein Array ist.
-
Hallo umi,
das hilft auch nicht. Isarray ist war, trotz nicht indexiertem Array.
Reiner
-
was verstehst Du unter nicht indexiertes Array ?
evtl. mit IsNull?
-
UBound... was gibt das für ein nichtindexiertes Array aus?
oder die Schweinerolle mit Provokation eines Fehlers und Abfangen des selben...
-
ich kenne keine Möglichkeit, das zu prüfen. Ich habe immmer ein Flag benutzt, dass ich erst dann auf true setzte, wenn ich das Array initialisiert habe.
-
... wie kann ich denn auf ein nicht indexiertes Array abfragen?
Dim liste() As String
Später mache ich je nach Code einen Redim oder auch nicht. Wenn ich keinen Redim mache, wie kann ich dann abfragen, ob das Array leer ist?
IsEmpty hilft nicht, Ubound führt zu Fehler.
Irgendwas ist hier unvollständig, Reiner.
Wenn nach Dim liste () as string nix passiert, ist Isarray (liste) garantiert False. Das Überprüfen mit Ubound etc. ist natürlich nur Geraffel, wenn da ein skalarer oder ein gar nicht vorhandener "Wert" vorliegt.
Poste doch bitte mal Code, und kennzeichne dabei
- die Optionen der entstehenden Werte
- die entdeckten Zeilen, die dann Fehler werden (bei welchen gegebenen Werten !)
- die Meldungen des Debuggers bzw. Deines error handlings.
Dir kann bei diesem Problem auf jeden Fall geholfen werden (Infos vorausgesetzt). Und das Problem ist so trivial nicht (wenn man es noch nie hatte bzw. richtig verarbeiten musste).
Bernhard
-
Guten Morgen Bernhard,
hier ist der kleine Code zum Testen:
Dim liste() As String
Dim liste2 As String
If Isarray(liste) Then
liste2 = Implode(ArrayUnique(liste, 0), ":")
Else
liste2 = ""
End If
Springt bei mir immer in die Implode-Zeile. Bekomme dann einen "Type mismatch Fehler".
So was nun? ;)
Gruß
Reiner
-
Guck Dir im Debugger den Array an, dann wirst Du feststellen, dass array(0)="" ist.
-
Hallo Ghandi,
verstehe ich nicht ganz.
Meinst du in meinem Beispiel liste(0)=""?
Aber ich habe liste() noch garnicht indexiert. Liste(0) existiert nicht.
Bei mir im Debugger steht vor der IF-Abfrage LISTE STRING().
Kein "" als Inhalt dazwischen, sondern leer.
Reiner
-
Wie wäre es das Array einfach zu initialisieren - mit einem Default Wert und dann einfach überschreiben.
Dann kannst Du auf jeden Fall was prüfen.
Dein Script ergibt so wie es hier steht überhaupt keinen Sinn. Es läuft immer in die gleiche Bedingung und ein Array macht auch nur Sinn, wenn wenigstens versucht wird was reinzuschreiben oder?
-
Mit einer nicht initialisierten Variablen zu arbeiten ist immer problematisch. Das lernen Programmierer (insbesondere C-Programmierer) schon in der ersten Stunde.
D.h. initialisiere dein Array mit Redim Liste(0) und frage dann entsprechend ab. Du kannst auch einen Wert reinschreiben, der mit Sicherheit nie vorkommt (bspw. "@@@") und darauf prüfen. Der Möglichkeiten gibt's da viele.
So wie du das im Moment machen willst, wird das nix.
Axel
-
Ja mit dem Initialisieren habt ihr Recht. Habe es dann auch so gemacht.
Wollte nur mal hören, ob es auch ohne geht.
Ist aber besser am Anfang ein Redim Liste(0) zu machen und dann später ein Redim Preserve Liste(var) wobei var auch 0 sein kann. Ist schöner.
Danke für Eure Vorschläge.
Reiner
-
Ist aber besser am Anfang ein Redim Liste(0) zu machen und dann später ein Redim Preserve Liste(var) wobei var auch 0 sein kann. Ist schöner.
Warum ein Redim Preserve?
Mach doch nur ein Redim Liste(var). Redim Preserve ist sehr inperformant (welch' schönes Wort ;) ) und sollte nach Möglichkeit nicht verwendet werden.
Axel