Autor Thema: LotusScript: Liste prüfen, ob leer  (Gelesen 7393 mal)

Offline marschul

  • Senior Mitglied
  • ****
  • Beiträge: 280
  • Geschlecht: Männlich
LotusScript: Liste prüfen, ob leer
« am: 30.05.11 - 11:55:42 »
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

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!
« Letzte Änderung: 30.05.11 - 12:10:47 von marschul »
Gruß
Marco

Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß. (Sokrates)
Keiner ist unnütz, er kann immer noch als schlechtes Beispiel dienen. (unbekannt)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: LotusScript: Liste prüfen, ob leer
« Antwort #1 am: 30.05.11 - 12:03:50 »
Was habe ich übersehen? DANKE!
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.
« Letzte Änderung: 30.05.11 - 12:08:32 von Peter Klett »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: LotusScript: Liste prüfen, ob leer
« Antwort #2 am: 30.05.11 - 12:05:36 »
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
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 marschul

  • Senior Mitglied
  • ****
  • Beiträge: 280
  • Geschlecht: Männlich
Re: LotusScript: Liste prüfen, ob leer
« Antwort #3 am: 30.05.11 - 12:10:30 »
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  ;)
Gruß
Marco

Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß. (Sokrates)
Keiner ist unnütz, er kann immer noch als schlechtes Beispiel dienen. (unbekannt)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: LotusScript: Liste prüfen, ob leer
« Antwort #4 am: 30.05.11 - 12:18:59 »
@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?

Offline marschul

  • Senior Mitglied
  • ****
  • Beiträge: 280
  • Geschlecht: Männlich
Re: LotusScript: Liste prüfen, ob leer
« Antwort #5 am: 30.05.11 - 12:25:36 »
@marschul: Vergiss auch nicht, die Variable wieder zurückzusetzen, ...

Hallo Peter,

die Liste ist eine Private Property der Klasse, d.h. die Kontrolle darüber liegt auch komplett innerhalb der Klasse, Erase der Liste und Zurücksetzen des Booleans befinden sich beide im Destruktor (bzw. letzteres an allen Stellen, wo's auch ein Erase der Liste gibt) :)
Gruß
Marco

Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß. (Sokrates)
Keiner ist unnütz, er kann immer noch als schlechtes Beispiel dienen. (unbekannt)

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: LotusScript: Liste prüfen, ob leer
« Antwort #6 am: 30.05.11 - 16:49:39 »
@Peter: Natürlich hat auch meine ListEntry tatsächlich den Namen:

FIRMA_ListIsEmpty

denn auch wir sind bei der Umstellung von 4 auf 5 unter anderem über die Lock- Property der NotesDocument- Klasse und über die Replace- Function gestolpert...

Habe den Namen nur fürs Beispiel hier "entfernt", aber einen Hinweis hätte ich natürlich geben können, da hast Du recht.
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)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz