Autor Thema: Anzahl Elemente eines Arrays mit Anzahl Elemente eines Anderen Arrays vergleiche  (Gelesen 2821 mal)

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
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
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Abfragen, ob element(0) ein Leerstring ist?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

botschi

  • Gast
Oder vorher auf isEmpty abfragen.

Matthias

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Isempty ist so niemals gegeben, da man mit dieser Methode immer ein Array zurück bekommt.

Bernhard

botschi

  • Gast
Ich kann doch ein Array abfragen  ???

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

Matthias

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
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
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
@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

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
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
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
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 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
« Letzte Änderung: 10.10.07 - 01:31:14 von koehlerbv »

Offline cebolina

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
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
Server: Lotus Domino 9.0.1FP4 HF70
Client: Release 9.0.1FP6

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
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?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Doch denn hier:

If Ubound (doc.Feld1) <> Ubound (doc.Feld2) Then
      Messagebox "Different arrays"
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
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.

mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
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.
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz