Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: wittmann_franz am 10.10.11 - 12:25:03

Titel: Listen vergleichen und füllen
Beitrag von: wittmann_franz am 10.10.11 - 12:25:03
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
Titel: Re: Listen vergleichen und füllen
Beitrag von: ata am 10.10.11 - 12:45:36
... 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 )

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
Titel: Re: Listen vergleichen und füllen
Beitrag von: pram am 10.10.11 - 12:52:42
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
Titel: Re: Listen vergleichen und füllen
Beitrag von: ata am 10.10.11 - 12:59:13
@Roland (Pram)

... so hatte ich das gemeint - das wäre auch mein Vorgehen. Gefragt hatte Volker aber mit dem @For ;)

Toni
Titel: Re: Listen vergleichen und füllen
Beitrag von: wittmann_franz am 10.10.11 - 14:37:35
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
Titel: Re: Listen vergleichen und füllen
Beitrag von: ata am 10.10.11 - 15:11:54
... zeige bitte, wie deine Listen beschaffen sind - das wird undurchschaubar - wie sehen die Werte der Listen aus?

Wenn Liste5 korrekt ist, dann brauchst du dort eben einen Replace mit den nur Zahlen - Liste6 := @Replace(Liste5 ; Liste1 ; Liste3) ;

Toni
Titel: Re: Listen vergleichen und füllen
Beitrag von: wittmann_franz am 11.10.11 - 08:45:36
Guten Morgen,

hier also meine aktuelle Feldformel (jetzt auch mit den richtigen Bezeichnungen)

Liste1 := App_Abteilung ;
Liste2 := App_InstallationenAnz ;
Liste3 := @Right(Liste2 ; " ");
Liste4 := @Left(Liste2 ; " ");

_wert1 := @Replace(Liste1 ; Liste4 ; "") ;
Liste5 := @Replace(Liste1 ; _wert1 ; "") ;
Liste6 := @Replace(Liste5 ; Liste1 ; Liste3) ;
Liste6

Inhalt Liste1: AMD, BB, E, FR, GF, HEG, J, KI, MW, P, PR, R, RC, RM   .....
Inhalt Liste2: AMD 1, BB 2, E 3, GF 5, FR 4, J 2, MW 3
Inhalt Liste3: 1;2;3;5;4;2;3
Inhalt Liste4: AMD;BB;E;GF;FR;J;MW
Inhalt _wert1: ;;;;;HEG;;KI;;P;PR;R;RC;RM ......
Inhalt Liste5: AMD;BB;E;FR;GF;;J;;MW;;;;;  ......
Inhalt Liste6: 1;2;3;5;4;;3;;;;;;   ......

Der Wert der Liste 2 wählt der User aus einer Dialogbox aus.
Sobald aus der Reihe ein Wert nicht angebeben wird (weil nicht benötigt) bleibt der nächste  dann leer, was falsch ist und erst der übernächste wird gefüllt.
Siehe Wert aus Liste1: HEG habe ich in diesem Beispiel ausgelassen und mache erst mit J weiter. Dort sollte eigentlich nach einem leeren Eintrag die 2 und dann die 3 von MW erscheinen.

Ich weiß es ist kompliziert, aber ich hoffe ich habe mich möglichst verständlich ausgedrückt
Titel: Re: Listen vergleichen und füllen
Beitrag von: ata am 11.10.11 - 09:37:32
... dann müsste es so gehen => Liste6 := @Replace(Liste5 ; Liste5 ; Liste3) ;
Titel: Re: Listen vergleichen und füllen
Beitrag von: wittmann_franz am 11.10.11 - 09:51:05
nein, leider nicht.....

Inhalt Liste6: 1;2;3;5;4;2;3;2; ;2;2;2;2;2;2       ........
richtig wäre : 1;2;3;5;4; ;2;3; ; ; ; ; ; ; ; ; ;     ........

weil HEG in Liste2 ja nicht belegt wird..
Titel: Re: Listen vergleichen und füllen
Beitrag von: ata am 11.10.11 - 09:59:04
... dann müsste aber => Liste6 := @Replace(Liste5 ; Liste4 ; Liste3) ; klappen
Titel: Re: Listen vergleichen und füllen
Beitrag von: wittmann_franz am 11.10.11 - 10:15:09
Hallo Toni,

das müsste kannst Du streichen.
Es klappt jetzt.

Vielen Dank für die Hilfe und die Geduld.
Titel: Warum nicht mit @Transform
Beitrag von: Jens Winkelmann am 11.10.11 - 20:57:20
Ich würde dieses mit @Transform machen.

So ungefähr (nicht getestet):

@Transform( Liste1; "_X"; @If( _X = Liste2; _X; "" ));

Ich finde das übersichtlicher.