Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[Lambda] SUBSTITUTE.MULTISTRINGS
#1
Einer geht heute noch:

SUBSTITUTE.MULTISTRINGS(TextString;ChangeReplaceArray)

=LAMBDA(txt;chngrplc;
WENN(ZEILEN(chngrplc)=1;txt;SUBSTITUTE.MULTISTRINGS(
WECHSELN(txt;INDEX(chngrplc;1;1);INDEX(chngrplc;1;2));
INDEX(chngrplc;SEQUENZ(ZEILEN(chngrplc)-1;;2);{1.2}))))


Beispielaufruf:
=SUBSTITUTE.MULTISTRINGS("Heute scheint d. Mond";A1:B3)

mit A1:B2: (links Change, rechts Replace)
Heute Morgen
Mond Sonne


Achtung: Aufgrund der Rekursion kann Zeile 3 nicht angesprungen werden, muss aber im Argument als letzte Zeile ohne Bedeutung enthalten sein! Also A1:B3 statt A1:B2.

Funktionsergebnis:
Morgen scheint d. Sonne

Bin gespannt, ob jemand den Schönheitsfehler mit der abschließend nötigen Leerzeile wegbekommt. Ich bin bei Rekursion immer ziemlich begriffstutzig.
Antworten Top
#2
Ich habe WEXELN und SUBSTITUTE.MULTISTRINGS (beides rekursiv ohne LET) jetzt umbenannt:

SUBSTITUTE.CHARS(Text;Search-Zeichenfolge;Replace-Zeichenfolge)
SUBSTITUTE.STRINGS(Text;2-Spalten-Search-Replace-Array)

Damit sind sie eindeutig Kinder von SUBSTITUTE (also WECHSELN).
___________________________

Problem sind zwischenzeitlich Bezeichnungen wie

RAND.UNIQ und
UNIQUE.PARTIAL,

weil UNIQUE eigentlich ja eine Eigenschaft darstellen sollte. EINDEUTIG() müsste also eher BEREICH.EINDEUTIG() heißen. Und UNIQUE.PARTIAL() dann ARRAY.UNIQUE.PARTIAL().
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste