Domino 9 und frühere Versionen > ND6: Entwicklung
LotusScript: Liste prüfen, ob leer
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