Domino 9 und frühere Versionen > ND8: Entwicklung
Listen vergleichen und füllen
wittmann_franz:
Hallo zusammen.
komme nicht so recht weiter, weil mir eine Idee bzw. ein Ansatz fehlt.
Folgendes habe ich vor.
Es existieren zwei Listen aus 2 Feldern.
in Liste1 gibt es 10 Einträge und in Liste2 4 Einträge.
Ich möchte das eine Formel die Listen dahingehend überprüft, dass die Liste 2 so aufgefüllt wird dass sie die selbe Anzal an Einträgen hat wie Liste1.... und..... die Einträge an der selben Position stehen.
Ein Beispiel:
Inhalt Liste 1:
Rot, Grün, Blau, Weiss, Schwarz, Gelb
Inhalt Liste 2:
Blau, Schwarz
Ergebniss in einem weiteren Feld sollte sein:
"", "", Blau, "", Schwarz, ""
Habe bisher hier im Forum die Formel von Bernhard gefunden:
@For(n := 1; n <= @Elements(Liste1); n := n + 1;FORMEL)
Ich dachte, dass wäre sicher der erste Ansatz um die Anzahl der Durchläufe zu bestimmen, da die Anzahl in Liste1 von Dokument zu Dokument variiert.
Hat jemand eine Idee und kann mir helfen.
Vielen Dank schon mal
Client 8.5.2
Server 8.5.2
ata:
... das kannst du mit der ForNext-Schleife durchaus machen - für Formel musst du eben schauen, ob die Werte aus Liste 2 in der Liste1 enthalten sind und dann eben eine Liste aufmachen und den Wert übernehmen.
Du arbeitest dann mit 2 ineinander geschachtelten Schleifen - in etwa so:
--- Code: ---@For( n := 1 ; n <= @Elements( Liste1 ) ; n := n + 1 ;
@For( k := 1; k <= @Elements( Liste2 ) ; k := k + 1;
@If( Liste2[k] = Liste1[n] ; _neu := _neu : _liste2[k] ; _neu := _neu : @Char(255) );
)
);
_neu := @Subset( _neu ; (@Elements( _neu ) - 1) * -1 )
--- Ende Code ---
Bei dieser Methode hast du ein leeres Element zuviel, daß du mit dem Subset wieder kappst. Es gibt aber auch eine Methode mit doppeltem @Replace...
Nur um eines musst du noch schauen - leere Elemente in Listen werden in Notes getrimmt. Daher sollten leere Werte mit einem geschützten Leerzeichen (@Char(255)) dargestellt werden...
Toni
pram:
Den Inhalt für das weitere Feld kannst du ggf. ganz einfach mit replace berechnen:
Liste1: Rot, Grün, Blau, Weiss, Schwarz, Gelb
Liste2: Blau, Schwarz
tmp := @replace(Liste1;Liste2;"") -> Rot, Grün, "", Weiss, "", Gelb
Liste3 := @replace(Liste1;tmp;"") -> "","",Blau,"", Schwarz, ""
Gruß
Roland
ata:
@Roland (Pram)
... so hatte ich das gemeint - das wäre auch mein Vorgehen. Gefragt hatte Volker aber mit dem @For ;)
Toni
wittmann_franz:
Herzlichen Dank bis hierhin.
@Replace funktioniert genauso wie ich das wollte.
Aaaaber, jetzt kommt noch etwas hinzu und ich scheitere schon wieder.
Wenn nun in Liste 2 folgender Inhalt steht: Blau 3, Schwarz 5,
Habe folgendes gemacht:
Liste 1 := FeldFarben ;
Liste 2 := FeldZahlen ;
Liste3 := @Right(Liste2 ; " "); ---- die Zahlen
Liste4 := @Left(Liste2 ; " "); ----- die Farben
_wert := @Replace(Liste1 ; Liste4 ; "") ;
Liste5 := @Replace(Liste1 ; _wert ; "") ;
Liste6 := @Replace(Liste5 ; Liste3 ; "") ;
Liste5
Das Ergebnis von Liste 5 ist genau wie von Euch beschrieben.
Wie kann ich das nun tricksen, dass statt der Farben die Zahlen dort berechnet werden.
Mein Ansatz in Liste6 ist jedenfalls verkehrt, weil er den Vergleich nicht hat, das habe ich wohl verstanden, weil @Replace wenn keine Übereinstimmung vorhanden ist die Quelle unverändert lässt. Aber die Lösung dafür bekomme ich halt nicht hin
Ich danke Euch vielmals für Eure Bemühungen
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln