Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: ReinerB am 06.10.05 - 16:53:18

Titel: Abfrage auf nicht indexierstes Array
Beitrag 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
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: umi am 06.10.05 - 16:55:09
Bevor Du mit UBound die obere Grenze bestimmen kannst, könntest Du mit IsArray zuerst prüfen ob es überhaupt ein Array ist.
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: ReinerB am 06.10.05 - 17:02:53
Hallo umi,

das hilft auch nicht. Isarray ist war, trotz nicht indexiertem Array.

Reiner
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: umi am 06.10.05 - 17:10:28
was verstehst Du unter nicht indexiertes Array ?

evtl. mit IsNull?
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: Gandhi am 06.10.05 - 17:18:03
UBound... was gibt das für ein nichtindexiertes Array aus?
oder die Schweinerolle mit Provokation eines Fehlers und Abfangen des selben...
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: animate am 06.10.05 - 17:43:16
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.
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: koehlerbv am 06.10.05 - 23:42:42
... 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
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: ReinerB am 07.10.05 - 07:45:38
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
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: Gandhi am 07.10.05 - 08:21:58
Guck Dir im Debugger den Array an, dann wirst Du feststellen, dass array(0)="" ist.
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: ReinerB am 07.10.05 - 08:56:50
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
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: Gandhi am 07.10.05 - 09:32:30
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?
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: Axel am 07.10.05 - 09:36:06
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
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: ReinerB am 07.10.05 - 10:04:04
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
Titel: Re: Abfrage auf nicht indexierstes Array
Beitrag von: Axel am 07.10.05 - 10:19:52
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