Domino 9 und frühere Versionen > ND6: Entwicklung

LotusScript: Liste prüfen, ob leer

(1/2) > >>

marschul:
Hallo,

in Listen sucht man Elemente mittes Übergabe eines Listtags. Ich versuche gerade, zu prüfen, ob eine Liste überhaupt Werte enthält, tappe aber entweder gerade blind durch die Designer-Hilfe oder es gibt da nix  ??? Folgendes Beispiel


--- Code: ---Sub Click(Source As Button)

 Dim oWS As New NotesUIWorkspace
 Dim oList List As NotesDocument
 Dim iCount As Integer

 iCount = 0
 Forall oElement In oList
  iCount = iCount + 1
 End Forall

 Msgbox "Vor Elementzuweisung" & Chr(13) & "islist: " & Cstr(Islist(oList)) & Chr(13) & _
 "isarray: " & Cstr(Isarray(oList)) & Chr(13) & "isempty: " & Cstr(Isempty(oList)) & Chr(13) & _
 "iCount: " & Cstr(iCount)
 
 Set oList("Muff1") = oWS.CurrentDocument.Document

 iCount = 0
 Forall oElement In oList
  iCount = iCount + 1
 End Forall

 Msgbox "Vor Elementzuweisung" & Chr(13) & "islist: " & Cstr(Islist(oList)) & Chr(13) & _
 "isarray: " & Cstr(Isarray(oList)) & Chr(13) & "isempty: " & Cstr(Isempty(oList)) & Chr(13) & _
 "iCount: " & Cstr(iCount)

End Sub
--- Ende Code ---

liefert mir sowohl vor, als auch nach Elementzuweisung die Ergebnisse
IsList = True
IsArray = False
IsEmpty = False

Lediglich über Forall mit dem Zähler bekomme ich verwertbare Ergebnisse, fände ich aber unglücklich (iCount vor Wertzuweisung = 0, nach Zuweisung iCount = 1).

Was habe ich übersehen? DANKE!

Peter Klett:

--- Zitat von: marschul am 30.05.11 - 11:55:42 ---Was habe ich übersehen? DANKE!

--- Ende Zitat ---
M.E. hast Du nichts übersehen, ich mache das auch so

EDIT: Wenn Du nur prüfen willst, ob eine Liste Inhalte hat, brauchst Du ja nicht die komplette Liste zu durchlaufen.

Dim flagListeninhalt As Integer
flagListeninhalt = False
Forall element in Liste
   flagListeninhalt = True
   Exit Forall
End Forall

Wenn Du das dann noch in eine Bibliothek auslagerst, hast Du Deine eigene Funktion.

Tode:
So ist das aber leider... Deshalb hat sich eigentlich jeder, der mit sowas arbeitet, eine eigene Function ListIsEmpty( list ) gebaut, mit verschieden hoher Komplexität.

Meine Variante sieht so aus:


--- Code: ---Function ListIsEmpty( lList As Variant ) As Boolean
'- FUNCTION ERROR HANDLING >>>>>>>>>>>>>>>>>>
On Error GoTo ErrRepeater
'- <<<<<<<<<<<<<<<<<< ENDE ERROR HANDLING
Dim blnIsEmpty As Boolean
blnIsEmpty = True
ForAll varEntry In lList
blnIsEmpty = False
Exit Forall
End ForAll
ListIsEmpty = blnIsEmpty
'- FUNCTION ERROR HANDLING >>>>>>>>>>>>>>>>>>
Exit Function
ErrRepeater:
Error Err, Error & "~" & GetThreadInfo(1) & {:} & Erl
End Function
--- Ende Code ---

marschul:
Hallo Peter & Torsten,

danke für die schnellen Antworten. Da meine Liste Bestandteil einer Klasse ist, werde ich einen Boolean setzen, der im Konstruktor False ist und bei einer Wertzuweisung der Liste auf True geht. Das ist dann eine zus. Eigenschaft der Klasse.
Torstens Beispiel wandert gleich ins Repository  ;)

Peter Klett:
@Tode: In unseren Bibliotheken bekommen alle Funktionen Namen, die niemals von Lotus/IBM verwendet werden, z.B. mit einem Firmenkürzel vorweg. Beim Umstieg von 4 auf 5 sind etliche Funktionen dazugekommen, die wir in eigenen Bibliotheken selbst geschrieben, und die sich im Namen nur durch das Firmenkürzel unterschieden hatten. Ohne diesen Unterschied hätte das gewaltig gekracht.

@marschul: Vergiss auch nicht, die Variable wieder zurückzusetzen, wenn Du Elemente wieder entfernst. Anstelle von True/False würde ich dann lieber einen Zähler mitlaufen lassen. Kannst Du verhindern (außer durch konsequente Entwicklung), dass Listen oder deren Elemente mit Erase an den Klassenfunktionen vorbei gelöscht werden?

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln