Autor Thema: Listen vergleichen und füllen  (Gelesen 5061 mal)

Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Listen vergleichen und füllen
« 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
Gruß
Volker

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Listen vergleichen und füllen
« Antwort #1 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
« Letzte Änderung: 10.10.11 - 12:47:46 von ata »
Grüßle Toni :)

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Listen vergleichen und füllen
« Antwort #2 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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Listen vergleichen und füllen
« Antwort #3 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
Grüßle Toni :)

Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Re: Listen vergleichen und füllen
« Antwort #4 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
Gruß
Volker

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Listen vergleichen und füllen
« Antwort #5 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
« Letzte Änderung: 10.10.11 - 15:13:26 von ata »
Grüßle Toni :)

Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Re: Listen vergleichen und füllen
« Antwort #6 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
Gruß
Volker

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Listen vergleichen und füllen
« Antwort #7 am: 11.10.11 - 09:37:32 »
... dann müsste es so gehen => Liste6 := @Replace(Liste5 ; Liste5 ; Liste3) ;
Grüßle Toni :)

Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Re: Listen vergleichen und füllen
« Antwort #8 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..
Gruß
Volker

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Listen vergleichen und füllen
« Antwort #9 am: 11.10.11 - 09:59:04 »
... dann müsste aber => Liste6 := @Replace(Liste5 ; Liste4 ; Liste3) ; klappen
Grüßle Toni :)

Offline wittmann_franz

  • Aktives Mitglied
  • ***
  • Beiträge: 241
  • Geschlecht: Männlich
Re: Listen vergleichen und füllen
« Antwort #10 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.
Gruß
Volker

Offline Jens Winkelmann

  • Junior Mitglied
  • **
  • Beiträge: 53
  • Geschlecht: Männlich
  • Jens Winkelmann
    • PAVONE AG
Warum nicht mit @Transform
« Antwort #11 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.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz