0

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

null
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Uwe, das müsste doch eigentlich auch mit dem einfachen "replace" funktionieren:

     

    replace(FELD, ";", ";
    ")

    • UweG
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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. ;)

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ach nee, Quatsch, das Komma ist ja nur das Parameter-Trennzeichen. Falsch geguckt. Vergiss es einfach. :)

    • UweG
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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()'

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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.

    • T_Bartzsch
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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,03g

     

    Via 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

    • UweG
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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.