Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: cebolina am 09.10.07 - 14:52:44

Titel: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergleiche
Beitrag von: cebolina am 09.10.07 - 14:52:44
Hallo @All,

ich habe zwei (Mehrfach)-Felder und will wissen, ob in beiden Feldern die gleiche Anzahl von Einträgen enthalten ist.

Mit
Code
If Ubound(doc.Feld1) <> Ubound(doc.Feld2) Then
'tu was
End If
funktioniert das auch.
Wenn aber im Feld1 nur "ein" Wert enthalten ist, und in Feld2 "kein" Wert enthalten ist, vergleiche ich immernoch 0 mit 0. (Ich hoffe, ich habe mich verständlich ausgedrückt.)

Wie kann ich erreichen, dass Ubound(Feld1) den Wert "1" annimmt, wenn "ein" Element enthalten ist, und Ubound(Feld1) den Wert "0" annimmt, wenn "kein" Element enthalten ist?


Gruß
Stefan
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergleiche
Beitrag von: DAU-in am 09.10.07 - 15:06:04
Abfragen, ob element(0) ein Leerstring ist?
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergle
Beitrag von: botschi am 09.10.07 - 15:23:42
Oder vorher auf isEmpty abfragen.

Matthias
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergle
Beitrag von: koehlerbv am 09.10.07 - 15:39:47
Isempty ist so niemals gegeben, da man mit dieser Methode immer ein Array zurück bekommt.

Bernhard
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergle
Beitrag von: botschi am 09.10.07 - 15:46:35
Ich kann doch ein Array abfragen  ???

Dim dynaVar As Variant
Print IsEmpty(dynaVar)          ' Output:  True
dynaVar = PI
Print IsEmpty(dynaVar)          ' Output:  False

Matthias
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergle
Beitrag von: cebolina am 09.10.07 - 15:54:30
Ich möchte aber doch gar nicht wissen, ob eines meiner Felder (oder beide) leer ist (egal, ob über isempty oder element(0) = "").
Ich will doch nur wissen, ob beide Felder die gleiche Anzahl von Elementen haben.  :-\

Gruß
Stefan
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergle
Beitrag von: koehlerbv am 09.10.07 - 15:57:56
@Matthias:
Du kannst natürlich Arrays so abprüfen. Anders ist das bei Items, die als Property von NotesDocument abgefragt werden. Das sind dann IMMER Arrays - selbst, wenn es das Item gar nicht gibt.

@Stefan:
Dein Problem besteht ja in dem oben beschriebenen (was Du ja schon erkannt hast). Du kannst folgendes machen:
Prüfen, ob das Item überhaupt existiert.
Wenn im Item keine leeren Elemente stehen können / dürfen, dann kannst Du - wie oben schon beschrieben, das 0. Elemente abprüfen.
Es ist also wirklich einfach.

Bernhard
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergle
Beitrag von: cebolina am 09.10.07 - 16:13:17
Danke @Alle

ich machs jetzt so:
Code
If doc.Feld1(0) <> "" And  doc.Feld2(0) <> "" Then
	If Ubound(doc.Feld1) <> Ubound(doc.Feld2) Then
		Tu was
	End If
Else
	If doc.Feld1(0) = "" And doc.Feld2(0) <> "" Then
		Tu was
	End If
	If doc.Feld1(0) <> "" And doc.Feld2 = "" Then
		Tu was
	End If
End If

Ich hatt mir vorgestellt, dass es einfacher geht - aber so krieg ich was ich will.

Gruß
Stefan
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergle
Beitrag von: koehlerbv am 10.10.07 - 01:17:50
Ich denke, das ist noch zu einfach gedacht.

Zuallererst: Du arbeitest da nicht mit Feldern (das sind die Dinger im Frontend im Gestaltungselement "Maske"), sondern mit Items. Ein himmelweiter Unterschied ... Wärst Du mal gerade in Gravenbruch auf der SoftSphere (http://soft-sphere.de/) gewesen - nicht nur ich habe mich da ausführlich darüber ausgelassen - mit einigen "A-ha-Effekten" bei manchen Zuhörern  ;)

Weiterhin musst Du ja postulieren, was für Dich überhaupt "leer" bedeutet. Wenn es keinerlei Leerstrings geben darf, ist es einfach. Wenn ein Ein-Element-Array keinen Leerstring enthalten darf, woanders aber drinstecken darf, funktioniert Dein Vorgehen nicht mehr. Ein Vorschlag (aber noch nicht der Weisheit letzter Schluss!!) wäre dann:
Code
	On Error Goto ErrorRoutine
	
	If Ubound (doc.Feld1) <> Ubound (doc.Feld2) Then
		Messagebox "Different arrays"
	Else
		If Ubound (doc.Feld1) + Ubound (doc.Feld2) = 0 Then
			If Len (doc.Feld1 (0)) + Len (doc.Feld2 (0)) = 0 Then
				Messagebox "Both arrays are empty"
			Else
				If (Len (doc.Feld1 (0)) + Len (doc.Feld2 (0)) =  Len (doc.Feld1 (0))) Or (Len (doc.Feld1 (0)) + Len (doc.Feld2 (0)) =  Len (doc.Feld2 (0))) Then
					Messagebox "One array is empty"
				Else
					Messagebox "Equal arrays"		
				End If
			End If
		Else
			Messagebox "Equal arrays"
		End If
	End If

Eine "einfache Lösung" kann es in diesem Zusammenhang auch gar nicht geben - das ist der Preis, den Du für den ansonsten mehr als komfortablen Umgang mit Items, wie Du ihn schon nutzt, bezahlen musst. Und die paar Zeilen sind ja nun auch nicht der Rede wert (ausgefeilt gehören sie dann in eine Script Library, denn sowas braucht man immer wieder!).

HTH,
Bernhard
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergle
Beitrag von: cebolina am 10.10.07 - 09:31:01
Hallo Bernhard,

es ehrt mich, dass du dich meines Problems so intensiv angenommen hast (noch dazu zu einer unchristlichen Uhrzeit) - Vielen Dank dafür!

Ich habe deinen Vorschlag ausprobiert und er funktioniert (was zu erwarten war  ;))
Mit meiner - zu einfach gedachten - Prüfroutine hatte ich allerdings auch das gewünschte Ergebnis.

In meinem konkreten Fall geht es lediglich darum, festzustellen, ob zu einer Produktliste die entsprechenden Stückzahlen vorhanden sind.
Ist kein Produkt da, muss es auch keine Stückzahl geben - und umgekehrt.

Bsp.:
Feld1 = "Produkt" ; Werte = "Birnen", "Äpfel", "Tomaten"
Feld2 = "Anzahl" ; Werte = "3", "5", "1"
Ergebnis: OK

Feld1 = "Produkt" ; Werte = "Birnen", "Äpfel", "Tomaten"
Feld2 = "Anzahl" ; Werte =  "3", "5"
Ergebnis: Nicht OK

Feld1 = "Produkt" ; Werte = ""
Feld2 = "Anzahl" ; Werte = ""
Ergebnis: OK


Also nochmal: Vielen Dank!

Gruß
Stefan
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergleiche
Beitrag von: DAU-in am 10.10.07 - 10:10:00
Und was ist bei:
Feld1 = "Produkt" ; Werte = "Birnen", "Äpfel", "Tomaten"
Feld2 = "Anzahl" ; Werte =  "3", "","5"

das wird von deiner Routine aber nicht erfasst, oder lieg ich da verkehrt?
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergle
Beitrag von: DerAndre am 10.10.07 - 10:30:33
Doch denn hier:

If Ubound (doc.Feld1) <> Ubound (doc.Feld2) Then
      Messagebox "Different arrays"
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergleiche
Beitrag von: DAU-in am 10.10.07 - 11:13:20
Aber UBound ergibt doch bei meinem Beispiel bei beiden Arrays 2, der Leerstring wird doch mitgezählt?
Und dann gibt es zu diesem Produkt keine Stückzahl, oder der Leerstring wird als 0 interpretiert.

Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergle
Beitrag von: DerAndre am 10.10.07 - 12:10:29
Oops. da hab ich wohl nicht richtig geschaut gehabt. Das Ergebnis sollte dann wohl identisch sein.

Eigentlich sollten zwei Forall Schleifen die auf "" prüfen das richtige Ergebnis liefern. Unabhängig von der Position der Leerstrings.
Titel: Re: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergle
Beitrag von: koehlerbv am 10.10.07 - 12:35:03
Das ist jetzt ja auch eine erweiterte bzw. erstmals ausführlich dargestellte Aufgabenbeschreibung. Man muss unter diesen Umständen im Fall "Equal arrays" zur eigentlichen Prüfung schreiten (für die Elemente des Stückzahlenarrays muss Isnumeric jeweils True ergeben).
Ich würde den Algorithmus dann allerdings etwas anders aufbauen (Function zur Prüfung auf "gleiche" Arrays, wenn diese True ergibt, dann die Stückzahlen prüfen).

Bernhard