Bestimmten Teil eines Textfeldes ändern
Ich bräuchte mal wieder Hilfe. Und zwar möchte ich beim Duplizieren von einem Datensatz überprüfen, ob im Feld "Beschreibung" irgendwo "KW (Leerzeichen) (irgendeine Zahl)" vorkommt.
Also ob das Feld Beshreibung zum Beispiel heißt "Auftrag xyz KW 8"
In dem Fall möchte ich, dass beim duplizierten Datensatz die Beschreibung übernommen wird und nur nach dem KW die Ziffer auf die aktuelle Kalenderwoche geändert wird.
Also ich weiß, wie man die Kalenderwoche ermittelt (week(date(today())). Aber mir ist nicht klar, wie ich das Suchen/Ersetzen von Text lösen kann.
Mein aktueller "Duplizieren" button sieht folgendermaßen aus (es wird nicht nur der Datensatz dupliziert sondern auch daran gehängte Datensätze in einer anderen Tabelle):
let my := this;
let new := duplicate(this);
new.(Auftragsdatum := date(today()));
new.(Lieferdatum := date(today()));
let newsub := for i in 'Sub-Aufträge'['Aufträge' = my] do
duplicate(i);
i.('Aufträge' := new);
i.(Rechnung := 0);
i.(Lieferdatum := 0)
end;
popupRecord(new)
3 Antworten
-
Du kannst mit regulären Ausdrücken - sog. RegEx nach solchen Pattern im Text suchen. In der Ninox gibts dazu zB. extractx
Du schaust über
if extractx(DEINTEXTFELD, "(KW\s)(\d+)", "$2") > 0 then "Ja" else "Nein" end
ob es in deinem Textfeld ein "KW" mit einem folgenden Leerzeichen und anschließend einer (oder mehrerer) Zahlen gibt.
Das Funktionsfeld würde jetzt "Ja" ausgeben.... oder dann halt im nächsten Schritt via replace den String "KW 8" durch die aktuelle KW zu ersetzen.
let myKW := week(date(today()));
if extractx('Text 2', "(KW )(\d+)", "$2") > 0 then
replace('Text 2', "KW " + extractx('Text 2', "(KW )(\d+)", "$2"), "KW " + myKW)
else
"Keine KW im Text gefunden"
endUm bei deinem Duplizieren zu bleiben:
let my := this;
let myKW := week(date(today()));
let new := duplicate(this);
new.(Auftragsdatum := date(today()));
new.(Lieferdatum := date(today()));
if extractx(Beschreibung, "(KW\s)(\d+)", "$2") > 0 then
new.(Beschreibung := replace(Beschreibung, "KW " + extractx(Beschreibung, "(KW )(\d+)", "$2"), "KW " + myKW))
end;
let newsub := for i in 'Sub-Aufträge'['Aufträge' = my] do
duplicate(i);
i.('Aufträge' := new);
i.(Rechnung := 0);
i.(Lieferdatum := 0)
end;
popupRecord(new)Kurz zur Erklärung der RegEx Befehle im extractx
Du suchst nach einem KW mit folgendem Leerzeichen (\d) und einer oder mehrerer Zahlen (\d+). Außerdem sind die beiden Suchbegriffe in zwei Gruppen aufgeteilt - einmal das (KW\s) und die beiden Zahlen (\d+). In der extractx-Funktion fragen wir nur die zweite Gruppe ab ($2)
-
Das klappt wunderbar so und ist auch noch so beschrieben, dass ich das Prinzip verstehe und vielleicht in anderen Fällen einsetzen kann.
Vielen lieben Dank!!
-
Gern. Reguläre Ausdrücke sind echt gut zu gebrauchen für viele Anwendungsfälle. Ich schaue immer auf https://regex101.com/ ob - und wie - das Konstrukt funktioniert und übernehme das dann in Ninox. Gerade auch die Möglichkeit einzelne Gruppen anzusprechen (Klammern, "$1", "$2" usw... ) finde ich echt hilfreich
Content aside
- vor 2 JahrenZuletzt aktiv
- 3Antworten
- 85Ansichten