replacex() Funktion für Zeilenumbruch nutzen?
Hallo
Mit replacex() kann man ja einen Suchstring anhand bestimmter Kriterien durch einen anderen String ersetzen.
Ich würde gerne den Suchstring (hier das Zeichen ';') durch das Zeichen ';' plus Zeilenumbruch ersetzen.
Ich habe schon alles im Internet zu regex abgegrast und bin auf das Format \n oder \r oder beides zusammen als Zeilenumbruch gestossen.
Leider weiss ich nicht ob und wie es in replacex() angewendet wird oder überhaupt angewendet werden kann, da die Funktion ja nur einen String mit einem String ersetzt.
Falls jemand eine Idee/Lösung hat würde es mir weiter helfen.
Danke
UweG
8 Antworten
-
Hallo Uwe, das müsste doch eigentlich auch mit dem einfachen "replace" funktionieren:
replace(FELD, ";", ";
")
-
Moin Axel
So funktioniert es.
Hätte ich auch selbst drauf kommen können.Ich spiele momentan mit den ...x()-Funktionen rum und habe mir für die ...x()-Funktionen eine Art Dashboard zum "rumspielen" gebaut, wo die Felder für Suchstring/Flag/Ersatzstring als Textfelder per Button für jede ...x()-Funktion ein entsprechendes Ergebnis liefert.
In deiner Lösung muss statt einem einfachen Textfeld 'Ersatzstring' ein mehrzeiliges Textfeld dafür erstellen damit es funktioniert.
Vielen Dank für die Lösung -
Ja, dieses "regex" ist für mich auch ein Buch mit sieben Siegeln. Zwei, drei ganz einfache Sachen habe ich mir bei Bedarf mal rausgewühlt, aber ansonsten ist das doch sehr abstrakt.
Davon abgesehen: Du kannst das Ergebnis auch in ein einzeiliges Textfeld schreiben. Angezeigt werden die Zeilumbrüche aber natürlich nur in einem mehrzeiligen. Oder habe ich dich falsch verstanden?
PS: Sehe gerade, dass ich als zweiten String-Parameter in der Formel versehentlich ein Komma statt des Semikolons geschrieben habe. Das hast du aber sicher selbst gemerkt und korrigiert. ;)
-
Ach nee, Quatsch, das Komma ist ja nur das Parameter-Trennzeichen. Falsch geguckt. Vergiss es einfach. :)
-
Nee, mit dem einzeiligen Textfeld funktioniert es nicht. Der Wert ; + Zeilenumbruch muss in einem mehrzeiligen Textfeld stehen.
Das Ergebnis wird natürlich in einem Mehrteiligen Textfeld ausgegeben.
Du findest die "Spiel Datenbank" im Reference-Team unter 'Prototyp_Script Replacex()' -
Ach so, "mehrzeilig" bezieht sich bei dir vermutlich auf das Feld, aus dem du den Ersatz-String liest. Okay, das scheitert ja schon daran, dass man in ein einzeiliges Feld keinen Zeilenumbruch einfügen kann, weil 'Enter' die Feldbearbeitung abschließt. Würde man dem einzeiligen Feld das Semikolon plus Zeilenumbruch per Script zuweisen, dann würde es funktionieren (siehe hinzugefügter "replace"-Button). Macht in diesem speziellen Fall natürlich wenig Sinn, aber den Kontext kannte ich ja nicht.
Von daher: Ja, wenn du den Ersatz-String manuell in einem Textfeld erfassen und dabei auch Zeilenumbrüche eingeben willst willst, dann brauchst du dafür ein mehrzeiliges Feld. ;)
Wobei man für den Zeilenumbruch auch ein eigenes Steuerzeichen definieren und über einen Änderungstrigger ersetzen könnte, wenn einen das mehrzeilige Feld stört.
-
Hallo Uwe,
wahrscheinlich kennst Du die Seite schon - aber super hilfreich finde ich regex101.com - dort teste ich meine Strings immer, bevor sie in der Formel landen. Was für mich extrem hilfreich war und eigentlich die regex Ausdrücke in Ninox erst so richtig hilfreich machen, sind die Gruppen und das ansprechen von Gruppen in der Formel. Wer es noch nicht kennt, hier ein....
Beispiel:
Ich möchte aus Inhaltsangaben alle Nährwerte als reine Zahlen extrahieren und in ein entsprechendes Feld schreiben. Hier zB den Zuckergehalt
Der Eingabestring lautet:
Energie 1060kJ 251kcal
Fett 0,591g
- davon gesättigte Fettsäuren 0,047g
Kohlenhydrate 50,458g
- davon Zucker 45,661g
Ballaststoffe 11,226g
Eiweiß 5,318g
Salz 0,03gVia Regex wird der String zerlegt, per Klammern in Gruppen eingeteilt und dann bequem zugewiesen:
Suche das Wort Zucker plus ein Leerzeichen (und vielleicht einem Doppelpunkt) (Zucker:?\s)
Suche darauf folgend eine Zahl, ein- oder mehrstellig mit einem Komma und einer oder mehreren Nachkommastellen (\d+,\d+)
Suche die Maßeinheit Gramm g entweder direkt an der Zahl oder evtl. mit leerzeichen (\s?g)
Jetzt hab ich drei Gruppen, welche ich in Ninox per $1, $2, $3 ansprechen kann!
extractx(STRING,"(Zucker:?\s?)(\d+,\d+)(\s?g)","g","$2)
Diese Möglichkeit zu gruppieren waren für mich der wichtigste Hinweis um regex in der Ninox nutzen zu können!
Beste Grüße
Tobias
-
Hallo Tobias
Vielen Dank für deine Anmerkung und Anregung.
Ich werde mir das mit Sicherheit anschauen und sehen ob und wie ich es verwenden kann.
Content aside
- vor 4 JahrenZuletzt aktiv
- 8Antworten
- 1242Ansichten