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
-
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
endend
Leider erkennt Nionox den Zeilenumbruch wohl nicht !
Was mache ich da falsch ??
-
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 -
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 -
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, "
")
*
-
Vielen Dank an R.Klünter und MZ für eure Hilfe !
Den Tip von MZ werde ich morgen mal testen.
-
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.
-
ich habe es gefunden, die letzte Zeile muss lauten:
...
TEXTFELD:=join(newArray,"
")
...
Nochmals vielen Dank für die Hilfe !!!!
-
Hallo I.R. ,
das freut mich zu hören/lesen und vielen Dank für das Teilen des Skripts mit der Community.
LG
Ricardo
-
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 ?
-
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.
-
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.
-
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
-
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)
-
Nach einem Tag testen nochmals einen Versuch gestartet
jetzt gehts
let teilStringB1 := extractx(teilStringB, "(.*)(\s)", "$1");
Umbruch beim Leerzeichen
-
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]), " ")
-
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]), " ")
-
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
-
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 1 JahrZuletzt aktiv
- 19Antworten
- 1182Ansichten
-
3
Folge bereits