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
-
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"
-
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
-
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...
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...
-
die Formel bei replace ist laut Handbuch immer: replace(Quelle, zu suchender Begriff, neuer Begriff).
-
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
-
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
-
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
-
Hi Leo,
danke für die schnelle Antwort, funktioniert wie immer perfekt ;)
Liebe Grüße und schönen Sonntag,
Reinhard
-
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 := myTextWenn 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
-
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
Content aside
- vor 3 JahrenZuletzt aktiv
- 10Antworten
- 2731Ansichten