Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: mibo11 am 01.07.05 - 16:33:40

Titel: Einzelwert innerhalb Liste durch Replace in Listenwert austauschen
Beitrag von: mibo11 am 01.07.05 - 16:33:40
Hallo,

steht im Momemt auf dem Schlauch.

Wie tausche ich einen Einzelwert innerhalb einer Liste in einen Listenwert?

Ich habe ein Kontrollkästchen und möchte die Werte dynamisch erzeugen.

quell_liste := "A":"B":"C";
ziel_liste := "Wert1|1": ("Wert2|2":Wert2a|2a" ) :"Wert3|3";
@Replace(quell_liste;ziel_liste)

In meinem Beispiel soll B ausgetauscht werden durch 2:2a.

Wie geht das?

Gruß Sascha


Titel: Re: Einzelwert innerhalb Liste durch Replace in Listenwert austauschen
Beitrag von: TMC am 01.07.05 - 16:52:24
D.h. die Liste, die ursprünglich z.B. 3 Listenwerte hatte, soll dann 4 Listenwerte haben, oder?

Vermutlich geht das nicht so einfach.
Vermutlich musst Du die Liste entsprechend neu zusammensetzen.

z.B. mit @Member also die Position suchen. Mit @GetMembers die Listenelemente links und rechts von dem zu ersetzenden Listenelement rausziehen und dann zusammensetzen.

Titel: Re: Einzelwert innerhalb Liste durch Replace in Listenwert austauschen
Beitrag von: TMC am 01.07.05 - 16:59:11
Ach ja, der @GetMembers ist leider nicht dokumentiert.



@GetMembers ( Liste ; Position ; [ Anzahl ] )

* Liste: Die Liste aus der Einträge ausgelesen werden sollen
* Position: Die Startposition der Liste, Typ Integer
* Anzahl: Optional. Die Anzahl der Einträge die zurückgegeben werden sollen. Typ Integer.
   Wenn das Schlüsselwort nicht angegeben wird, wird nur 1 Eintrag zurückgegeben.

Beispiele:
Dieses Beispiel gibt die Liste "B":"C":"D" zurück
_List := "A" : "B" : "C" : "D" : "E";
 @GetMembers(List; 2; 3)

 Dieses Beispiel gibt "C" zurück
_List := "A" : "B" : "C" : "D" : "E";
@GetMembers(_List; 3)
Titel: Re: Einzelwert innerhalb Liste durch Replace in Listenwert austauschen
Beitrag von: koehlerbv am 01.07.05 - 17:01:58
Ich befürchte auch, das geht nicht "einfach", da sowohl @Replace als auch @ReplaceSubstring immer die Dimension der Ursprungsliste respektieren.

So, wie von Matthias vorgeschlagen prinzipiell vorgeschlagen wurde, würde ich das auch angehen (wenn kein LS in Frage kommt).
Da @Getmembers undokumentiert ist, sollte man vielleicht zur Sicherheit vielleicht doch auf @Subset ausweichen, da dadurch das Konstrukt noch nicht mal sehr aufgebläht würde (vor allem durch die Möglichkeit, negative Werte angeben zu können).

Bernhard

EDIT: Auf das undokumentierte Getmembers hat TMC unterdessen schon hingewiesen ...
Titel: Re: Einzelwert innerhalb Liste durch Replace in Listenwert austauschen
Beitrag von: TMC am 01.07.05 - 17:12:31
Stimmt, Bernhard, @Subset ist hier eigentlich besser als @GetMembers, und auch sehr einfach umzusetzen.
Mit diesen undokumentierten Dingen muss man eh immer sehr vorsichtig sein, in der Designerhilfe zur R7 Beta 2 wird @GetMembers übrigens auch nicht erwähnt.
Titel: Re: Einzelwert innerhalb Liste durch Replace in Listenwert austauschen
Beitrag von: koehlerbv am 01.07.05 - 17:17:16
Undokumentierte Funktionen: Es bleibt halt immer das mulmige Gefühl ... Einige tauchen dann ja in der Doku der nächsten Version auf, andere bleiben "geheim". Man weiss halt nie, was man davon halten soll.

Reizvoll sind sie natürlich schon, diese "under cover feature"  ;D
Aber wenn ich mir vorstelle, dass NotesUIDocument.ModifiedSinceSaved in einer kommenden Version nicht mehr funktioniert ... Und man hätte es eingesetzt ...

Bernhard
Titel: Re: Einzelwert innerhalb Liste durch Replace in Listenwert austauschen
Beitrag von: mibo11 am 01.07.05 - 17:25:25
Vielen Dank für die Anregungen.

Hab's jetzt erst einmal ganz profan gelöst. Scheint zu funktionieren. Ich schaue mir den Code aber heute abend noch einmal an, da ich jetzt ganz dringend nach Hause muss und werde euch berichten.  :)


such_bugfix := "AUSTAUSCHELEMENT";
austausch_bugfix := "Wert2|2":Wert2a|2a" ;
quell_liste := "A":"B":"C";
ziel_liste := "Wert1|1":such_bugfix:Wert3|3;
einzelwert := @Replace(allewerte;quell_liste;ziel_liste);
@If(@Contains(einzelwert;such_bugfix);austausch_bugfix;einzelwert)

Gruß Sascha
Titel: Re: Einzelwert innerhalb Liste durch Replace in Listenwert austauschen
Beitrag von: mibo11 am 01.07.05 - 19:44:58
Habe gerade bemerkt, dass meine Fragestellung ziemlich bescheiden war. Meine Problemstellung war nämlich so:

Als Vergleichswert kommt nur ein Wert in Frage, der dann ggf. durch einen, bzw. zwei Werte ausgetauscht wird.

Deshalb funktioniert die vorher gepostete Formel auch.

Sofern allerdings Listen durch unterscheidlich große Listen ausgetauscht werden sollen, funktioniert diese Formel nicht und man müsste in der Tat auf @Subset in Verbindung mit @Elements zurückgreifen.

Vielen Dank nochmals für die Anregungen.

Gruß Sascha  :)