Domino 9 und frühere Versionen > ND8: Entwicklung

Listen vergleichen und füllen

(1/3) > >>

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