0

Zeilenumbruch mehrzeiliges unformatiertes Textfeld

Kann in einem mehrzeiligen Textfeld bei der Eingabe die Länge der aktuellen Eingabezeile

ermittelt werden, oder noch besser ein Zeilenumbruch erzwungen werden ?

19 Antworten

null
    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    ich habe mal folgenden Script probiert:

    let lang := length(Text);.........Länge des Textfeldes (mehzeiliger Text)
    let maxlang := 55;  ..........für später als maximale Zeilenlänge
    let zumbruch := "
    "; ..................Zeilenumbruch
    let zaehler := 0; ..........Zähler für später
    for i from 0 to lang do
        if substr(Text, i, i + 1) = zumbruch then
            alert(i) ........Kontrollmeldung zum Test
        end

    end

    Leider erkennt Nionox den Zeilenumbruch wohl nicht !

    Was mache ich da falsch ??

    • Customer Service Ninox
    • Ricardo_Klunter
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo I.R. 

     

    Es gäbe die Möglichkeit einen geschriebenen Text nach einer gewissen Zeichenlänge zu einem Zeilenumbruch zu zwingen, jedoch nicht während man das Feld beschreibt. Hier könnte man "Nach Änderung" ein Skript laufen lassen.

    LG
    Ricardo

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Das habe ich versucht, habe es aber nicht nicht hinbekommen. Konnte den Zeilenumbruch nicht einfügen.

    Jetzt behelfe ich mir mit einer Befehlsschaltfläche die die Zeilen zählt und mir anzeigt welche über eine bestimmte Anzahl Zeichen liegt.

    Ist zwar nicht elegant, hilft aber etwas. Das Einfügen eines Umbruches wäre natürlich besser !

    Hier mein Code:

    let myAR := split(Langtext, "
    ");
    let z := 0;
    let meld := "";
    for i in range(0, count(myAR), 1) do
    let l := length(item(myAR, i));
    if l > 65 then
    meld := meld + "
    (" + (i + 1) + " - " + l + ") " + substr(item(myAR, i), 0, 45) + "..."
    end
    end;
    if meld != "" then
    dialog("Zeilen über 65 Zeichen !", meld, ["ok"])
    end

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi, I.R. meinst Du so etwas? Für TEXTFELD mußt Du noch den Namen Deines mehrzeiligen Textfelds einfügen. 

    *

    let textFeld := replacex(TEXTFELD, "\n", " ");
    let laenge := length(TEXTFELD);
    let newArray := [""];
    newArray := null;
    let restString := textFeld;
    let counter := false;
    while counter = false do
    let teilString := [substr(textFeld, 0, 65)];
    let restString := substr(textFeld, 65, laenge);
    textFeld := restString;
    newArray := array(newArray, teilString);
    if length(textFeld) < 65 then
    newArray := array(newArray, [restString]);
    counter := true
    end
    end
    ;
    join(newArray, "
    ")

    *

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Vielen Dank an R.Klünter und MZ für eure Hilfe !

    Den Tip von MZ werde ich morgen mal testen.

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Sorry für die späte Antwort, die Zeit....

    Der Code oben funktionierte erstmal nicht.

    Ich werde aber noch rumbasteln. Wenn ich es schaffe werde ich den Code

    hier für Interssierte veröffentlichen.

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    ich habe es gefunden, die letzte Zeile muss lauten:

    ...

    TEXTFELD:=join(newArray,"

    ")

    ...

    Nochmals vielen Dank für die Hilfe !!!!

    • Customer Service Ninox
    • Ricardo_Klunter
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo I.R. , 

     

    das freut mich zu hören/lesen und vielen Dank für das Teilen des Skripts mit der Community.

     

    LG

    Ricardo

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Jetzt noch eine Frage zum Thema.

    Ist es möglich in einen mehrzeiligen Textfeld die Zeilenlänge der aktuell bearbeiteten Zeile zu ermitteln ?

    Die Frage ist dabei wohl, welche Zeile ist aktuell ?

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi I.R. Letztere ist sicher die gute Frage. Wenn Du in einem normalen Textfeld fortlaufend schreibst, dann ändert sich die letzte Zeile je nach Größe des Fensters. Hier sehe ich keine Möglichkeit. Wenn die vorletzte Zeile mit einen echten Zeilenumbruch endet, dann kannst Du folgendes versuchen. Da der Zeilenumbruch mitgezählt wird, mußt Du -1 rechnen. Das zählt dann nach jedem Zeilenumbruch wieder von neuem die letzte Zeile.

    *

    length(extractx(TEXTFELD, "\n.+$")) - 1

    *

    Wenn du aber obigen Code zur Grundlage legst, dann erhältst Du ja eigentlich ein Array und demzufolge ist ja die letzte Zeile der letzte Index des Arrays. Das wäre einfach. Dann hilft ein Funktionsfeld mit obigem Script, nur statt der letzten beiden Zeilen:

    *

    let Q := cnt(newArray);
    length(item(newArray, Q))

     

    *

    Gruß Mirko.

    • Wegener & Hinz GmbH
    • green_cup
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Vielen Dank für die Hilfe!

    Die Zeilenzahl sollte während des Schreibvorganges Zeile angezeigt werden. Denke mal das geht mit Ninox nicht (kein Ereignis wird

    beim Schreiben ausgelöst und die aktuelle Kursorposition ???).

    Habe mir jetzt so beholfen, dass nach Texterstellung, also wenn ich das Textfeld wechsel, ein Warnhinweis beim Vorkommnis mindestens

    einer zu langen Zeile angezeigt wird.

    • Andreas_Kappes
    • vor 4 Monaten
    • Gemeldet - anzeigen

    Hallo zusammen 

    ich möchte dieses Thema nochmals aufrufen um eine Erweiterung einzufügen.

    Mein Zeilenumbruch soll bei 100 bis 120 Zeichen sein aber an dem Punkt umgebrochen werden wenn ein Satzzeichen oder Leerzeichen in dem Bereich kommt und nicht starr mitten in einem Wort

    Gruß

    Andreas

      • Icarus_Ralf_Becker
      • vor 4 Monaten
      • Gemeldet - anzeigen

       hier könnte man mit 

      Textfeld : = replace(Textfeld, ".","

      ")

       

      arbeiten

    • Andreas_Kappes
    • vor 4 Monaten
    • Gemeldet - anzeigen

    Hallo

    ich habe jetzt den Bereich von 100 bis 120 Zeichen ausgeschnitten

    in diesem Textteil möchte ich jetzt das erste Satzzeichen suchen, dann den Text bis zu diesem Zeichen nochmals ausschneiden und die Zeichen dann zählen.

    die Anzahl Zeichen + 100 ergibt dann mein erster Zeilenumbruch.

    Soviel zur Theorie

    Mein Code funktioniert nicht an dem Punkt wo ich aus dem TeilStringB das erste Satzzeichen suchen möchte. Mit extractx bekomme ich es nicht hin, da ich nicht weiß wie ich die Sonderzeichen in die Suche integrieren soll. Hier mal mein Code die Markierte Stelle (Zeile 9) habe ich schon versucht mit unterschiedlichen Varianten:


    let textFeld := replacex(Zusatzinformationen, "\n", " ");
    let laenge := length(Zusatzinformationen);
    let newArray := [""];
    newArray := null;
    let restString := textFeld;
    let counter := false;
    while counter = false do 
        let teilStringB := text([substring(textFeld, 100, 120)]);
        let teilStringB1 := extractx(teilStringB, "(.*)(";")", "$1");
        let laengeTeil := length(teilStringB1);
        let laengeTeil2 := 100 + laengeTeil;

        let teilString := [substr(textFeld, 0, laengeTeil2)];
        let restString := substr(textFeld, laengeTeil2, laenge);
        textFeld := restString;
        newArray := array(newArray, teilString);
        if length(textFeld) < 120 then
            newArray := array(newArray, [restString]);
            counter := true
        end
    end
    ;
    Zusatzinformationen := join(newArray, "
    ")


    Wie müsste ich jetzt extractx oder auch replace gestalten um das erste der drei Satzzeichen zu finden (Komma, Semikolon, Leerzeichen)

    • Andreas_Kappes
    • vor 4 Monaten
    • Gemeldet - anzeigen

    Nach einem Tag testen nochmals einen Versuch gestartet

    jetzt gehts 😖

    let teilStringB1 := extractx(teilStringB, "(.*)(\s)", "$1");

    Umbruch beim Leerzeichen

    • mirko3
    • vor 4 Monaten
    • Gemeldet - anzeigen

    Hallo Andreas. Beim Testen ist mir aufgefallen, dass ein paar Wörter in Deinem Script abgeschnitten werden und der Text deutlich länger als 120 Zeichen ist. Deshalb hier noch eine Alternative. Die vorletzte Zeile wird in meinem Script oft viel kleiner sein, aber sonst stimmt es überwiegend bei Testtexten. Mirko

    let textField := replacex(Zusatzinformationen, "\n", " ");
    let result := "";
    let endResult := [""][!= ""];
    while length(textField) > 100 do
        let partString := extractx(textField, "[\wÄ-Üä-üß\(]+\b[\)\.\,\s]{0,2}");
        let lengthPartString := length(partString);
        result := result + partString;
        textField := substr(textField, lengthPartString);
        if length(result) >= 100 then
            endResult := array(endResult, [result]);
            result := ""
        end
    end
    ;
    Goal := join(array(array(endResult, [result]), [textField]), "
    ")
    
    • mirko3
    • vor 4 Monaten
    • Gemeldet - anzeigen

    Es geht auch noch kürzer. Wenn die Zeichenanzahl sehr vieler Wörter über 10 liegt, müßte der Wert in dem Quantor {90,100} angepaßt werden. Mirko

    let textField := replacex(Textfeld, "\n+", " ");
    let result := [""][!= ""];
    while length(textField) > 100 do
        let partString := extractx(textField, "[\w,)(.\s?!ß]{90,100}\b[\s.!,?]{1,2}");
        let lengthPartString := length(partString);
        textField := substr(textField, lengthPartString);
        result := array(result, [partString])
    end
    ;
    Goal := join(array(result, [textField]), "
    ")
    
    • Andreas_Kappes
    • vor 4 Monaten
    • Gemeldet - anzeigen

    Hallo Mirko

    deine Varianten habe ich jetzt gar nicht zum laufen bekommen.

    Hier wurden Buchstaben hinzugefügt und fast unzählige Zeilenumbrüche :-( 

    Hab mich aber ehrlicherweise auch nicht näher dann damit beschäftigt da meine Variant oben ja funktioniert 

    Gruß

    Andreas

    • mirko3
    • vor 4 Monaten
    • Gemeldet - anzeigen

    Hallo Andreas. Ich habe nur an meinen Beispieltexten gesehen, dass bei deiner Version auch Wörter abgeschnitten worden und wollte eine funktionierende Version hinterlassen. Aber bei Technischen Texten mit -%& und ähnlichen Zeichen versagt meine auch. Hier mal meine letzte, korrigierte Version.

    let textField := replacex(Textfeld, "\n+", " ");
    let result := [""][!= ""];
    while length(textField) > 120 do
        let partString := extractx(textField, "\b.{100,120}\b[\s.!,?]{1,2}");
        let lengthPartString := length(partString);
        textField := substr(textField, lengthPartString);
        result := array(result, [partString])
    end
    ;
    Goal := join(array(result, [textField]), "
    ")
    

Content aside

  • vor 4 MonatenZuletzt aktiv
  • 19Antworten
  • 1081Ansichten
  • 3 Folge bereits