Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Wilhelm Weber am 05.08.09 - 13:56:35

Titel: mehrfache Einträge in einer Liste identifizieren
Beitrag von: Wilhelm Weber am 05.08.09 - 13:56:35
Hallo zusammen,

ich habe ein problem. Aus einer Liste mit vielen einträgen sollen nur die Werte angezeigt werden, die doppelt oder noch häufiger in der Liste vorkommen.

Die Liste habe ich mir aus verschiedenen Feldern zusammengestellt, nun komme ich aber nicht weiter.

Viele Grüße
Wilhelm
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: ata am 05.08.09 - 14:01:37
Hallo Wilhelm,

Formel oder Script?

Toni
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: Wilhelm Weber am 05.08.09 - 14:03:31
bin momentan in der Formalsprache
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: Thomas Schulte am 05.08.09 - 14:06:13
@do
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: Wilhelm Weber am 05.08.09 - 14:14:19
Das verwirrt mich jetzt .... ???
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: ata am 05.08.09 - 15:11:53
... mit @For durch die Liste laufen und prüfen ob der aktuelle Wert schon da war. War er schon da, dann ist es ein doppelter. Du nimmst also den aktuellen Wert und schaust, ob du in in deiner Prüfliste schon entahlten hast. Ist er schon drinnen, dann nimmst du diesen in eine neue Liste auf. Die zweite Liste enthält dann alle mehrfach vorkommenden Werte...

Toni
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: Wilhelm Weber am 06.08.09 - 09:06:46
Vielen dank für den Tip, ich werde es dann gleich mal angehen.
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: Wilhelm Weber am 06.08.09 - 12:11:44
so, verzweifele mal wieder ( bin kein Entwickler..)

das habe ich gebastelt mit dem Resultat, dass mir eine leere Liste angezeigt wird.

Liste:= @Trim(@Replace(Feld1:Feld2:Feld3...""; ""));

@For(n:=1;n<=@Elements(Liste);n:=n+1;
   
       temp:=temp:Liste;
       tmp :=tmp:neu;
@If(@Contains(tmp;Liste[n])=1;neu :=neu:Liste[n];""));
@If(@Contains(temp;Liste[n])=1;tmp :=tmp:Liste[n];"");

@trim(neu)
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: Thomas Schulte am 06.08.09 - 13:53:46
Aus deiner einen Liste wieder zwei machen.

Eine davon darf nur Einzelwerte enthalten.

Einmal durch ein Liste mit den eindeutigen Werten gehen und für jeden Wert in der Liste mit den Eindeutigen Werten die Anzahl der Elemente in deiner Originalliste ermitteln und an das Elemente das du gerade überprüft hast anhängen.

Anschließend diese geänderte Eindeutige Liste überprüfen und alles was <2 ist wegwerfen Das was übrig bleibt sind deine mehrfach vorkommenden Elemente.

Wie du die verarbeitest hängt davon ab was du erreichen willst. Du kannst als Ergebnis WertX existiert n mal rausbekommen oder nur noch eine Liste mit übriggebliebenen Werten.

@unique, @for, @trim, @transform @explode @if @texttonumber und @word sind dazu notwendig.

Und das Ganze geht in vier Zeilen Formelsprache, oder wenn du es aus einem Button heraus aufrufst in fünf Zeilen. Es ist allerdings schon deutlich komplexere Formelsprache.
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: ascabg am 06.08.09 - 14:08:07
Hier noch eine kleine Anregung.

Code
_L1 := "Test" : "Test" : "Test2" : "Test3" : "Test4" : "Test" : "Test2";
_L2 := "";
_L3 := "";
@Prompt([Ok]; "Anzahl"; "Anzahl: " + @Text(@Elements(_L1)));
@Prompt([Ok]; "Liste 1"; "Wert 1: " + _L1[1]);

@For
(n:=1; n<=@Elements(_L1); n:=n+1;
  @If(@IsMember(_L1[n]; _L2); _L3 := _L3 : _L1[n]; _L2 := _L2 : _L1[n])
);

@Prompt([Ok]; "Liste 2"; @Implode(_L2));
@Prompt([Ok]; "Liste 3"; @Implode(_L3))

oder um mit koehlerbv (Berhard) seinen ueblichen Vergleichen von Strings und Listen zu arbeiten
Code
@For
(n:=1; n<=@Elements(_L1); n:=n+1;
  @If(_L1[n] *= _L2; _L3 := _L3 : _L1[n]; _L2 := _L2 : _L1[n])
);


Andreas
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: Thomas Schulte am 06.08.09 - 14:35:37
Andreas du petzt .....   ;D

Code
C_LIST := List1:List2;
T_LIST := @Unique(C_LIST);
@For(N:=1;n<=@Elements(T_LIST);N := N+1;INT_LIST := INT_LIST + "~" + T_LIST [N]+ "#" + @Text (@Elements(@Trim(@Transform(C_LIST;"V";@If(T_LIST[N]!= V ;"" ; V))))));
FIELD ListMultipleElements := @Trim(@Transform(@Explode(INT_LIST;"~");"V1";@If(@TextToNumber(@Word(V1;"#";2))>1;@Word(V1;"#";1);"")));

Liefert das selbe Ergebnis wie der Code von Andreas, beziehungsweise von Bernhard, aber kann entweder Alternativ, oder zusätzlich noch die Anzahl der Elemente zurückgeben, wenn man in der letzten Zeile das zweite @Word einfachtdurch V1 ersetzt.
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: Wilhelm Weber am 06.08.09 - 14:44:01
so , ich habs jetzt raus...

Liste:= @Trim(@Replace(Feld1:Feld2:Feld3...""; ""));

@For(n:=1;n<=@Elements(Liste);n:=n+1;
@If(@Contains(tmp;Liste[n])=1;neu :=neu:Liste[n];"");
@If(@Contains(Liste;Liste[n])=1;tmp :=tmp:Liste[n];""));

@Trim(neu)

Danke für eure Tipps !!
Titel: Re: mehrfache Einträge in einer Liste identifizieren
Beitrag von: ascabg am 06.08.09 - 15:09:28
Zitat
Andreas du petzt .....    ;D

 :-[