0

Mehrere Texte durch Variablen ersetzen

Liebes Forum,

ich möchte von einem vorgefertigten Text mehrere stellen durch andere Felder ersetzen:

 

"Am ##RELEASE## ist ##PRODUKT## bei uns erschienen. "

 

Habe ich in einer Vorlage angelegt. Nun habe ich mir ein leeres Textfeld in der Tabelle der Produkte angelegt. Über einen Button "Text erstellen" wird folgende Funktion ausgeführt:

'Text' := replace(Firma.'Fußtext Anschreiben (Vergangen)', "##RELEASE##", text('Release Datum'))

Jetzt wird super das jeweilige Datum des jeweiligen Produktes verwendet. Ich möchte nun aber noch weitere Produktspezifische Textfelder ersetzen. Wie kann ich die Formel erweitern?

 

Danke vorweg :)

10 Antworten

null
    • Uwe_Wagner.2
    • vor 5 Jahren
    • Gemeldet - anzeigen

    In dem unten stehenden Code ist die Voraussetzung das die zu Werte, die zu ersetzen sind als Array vorliegen.

    let tmpText := "%s zum Löschen verwenden, %s auf keinen Fall. %s wäre auch schlimm";
    let fuellText := "Kohlendioxid, Wasser, Benzin";
    let tmp := "";
    let arrTxt := split(fuellText, ",");
    for i in arrTxt do
         tmp := replacex(tmpText, "%s", "", i);
       tmpText := tmp
    end;
    tmp

    => "Kohlendioxid zum Löschen verwenden, Wasser auf keinen Fall. Benzin wäre auch schlimm"

    • Torsten_Stang.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Reinhard,

     

    Du wirst nicht darum herumkommen, die replace-Funktion mehrfach miteinander zu verschachteln.

     

    'Text' := replace(replace(Firma.'Fußtext Anschreiben (Vergangen)', "##RELEASE##", text('Release Datum')), "##Produkt##", text('Produkt'))

     

    lg, Torsten

    • Reinhard
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hi Torsten, an eine ähnlich Lösung dachte ich bereits und ich hatte es schon mal probiert.

    Leider bekomme ich eine Fehlermeldung, da zu viele Strings aufeinander folgen...

    Bildschirmfoto 2019-05-12 um 09.27.53

     

    Die Lösung von Uwe ist in meinem Fall nicht sinnvoll. Der Text muss in einer Vorlage durch Mitarbeiter modifizierbar bleiben. Die Begriffe brauche ich weiterhin als Variablen, die sich immer auf das jeweilige Produkt beziehen... 

    • Reinhard
    • vor 5 Jahren
    • Gemeldet - anzeigen

    die Formel bei replace ist laut Handbuch immer: replace(Quelle, zu suchender Begriff, neuer Begriff).

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Reinhard,

    in deiner Formel versuchst du einfach alle Textpaare nacheinander zu schreiben. Das geht natürlich nicht. Wenn du die Formel von  Torsten nochmal anschauen würdest, wirst du sehen, dass replace bei ihm zwei mal aufgeführt ist. Diese Verschachtelung ist auch meiner Meinung nach die einzig vernünftige Lösung. Die Formel kann man vielleicht ein bisshen übersichtlicher darstellen:

    ---

    let myT:=Firma.'Fußtext Anschreiben (Vergangen)';

    let myT1:=replace(myT, "##RELEASE##", text('Release Datum'));

    let myT2:=replace(my1,"##PRODUKT##", text('Produkt'));

    myT2

    ---

    Man ersetzt in der zweten Zeile alle ##RELEASE## durch text('Release Datum'), dann nimmt man den geänderten Text und ersetzt dort alle ##PRODUKT## durch text('Produkt')). So kannst du alle Variablen nacheinander schreiben.

    Leo

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    ah, und wenn es mit de Button gemacht werden soll dann:

    ---

    let myT:=Firma.'Fußtext Anschreiben (Vergangen)';

    let myT1:=replace(myT, "##RELEASE##", text('Release Datum'));

    let myT2:=replace(my1,"##PRODUKT##", text('Produkt'));

    Text:=myT2

    ---

    Leo

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Misst, Schreibfehler:

    ---

    let myT:=Firma.'Fußtext Anschreiben (Vergangen)';

    let myT1:=replace(myT, "##RELEASE##", text('Release Datum'));

    let myT2:=replace(myT1,"##PRODUKT##", text('Produkt'));

    Text:=myT2

    ---

    Leo

    • Reinhard
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hi Leo,

    danke für die schnelle Antwort, funktioniert wie immer perfekt ;)

    Liebe Grüße und schönen Sonntag,

    Reinhard

    • Mirko
    • vor 5 Jahren
    • Gemeldet - anzeigen

    noch ne Variante wäre

    let myArray := text('Release Datum') + "," + text('Produkt');
    let myFields := split(text(myArray), ",");
    let myPlaceholder := ["##RELEASE##", "##PRODUKT##"];
    let anz := cnt(myPlaceholder);
    let myText := Firma.'Fußtext Anschreiben (Vergangen)';
    let i := 0;
    for i in range(anz) do
    myText := replace(myText, item(myPlaceholder, i), item(myFields, i))
    end;
    Text := myText

    Wenn man dies erweitern möchte, dann einfach bei myArray + "," + WEITERES PRODUKT FELD anfügen und bei myPlaceholder den Begriff, der ersetzt werden soll hinzufügen z.B.  , "##NEUER PLACEHOLDER##"

    Gruß

    Mirko

    • john_eans
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Oder so vielleicht, noch etwas kürzer...

    let myPLACEHOLDER := ["@@PH1@@", "@@PH2@@"];
    let myERSATZ := [text('Ersatz 1'), text('Ersatz 2')];
    let myTEXT := Textvorlage;
    for ii in range(0, cnt(myPLACEHOLDER)) do
    myTEXT := replace(myTEXT, item(myPLACEHOLDER, ii), item(myERSATZ, ii))
    end;
    myTEXT