Text Zeilenweise ausgeben
Hallo
Hänge gerade an einem kleineren größeren Problem
Und zwar versuche ich eine Textausgabe für einen beliebig langen String zu realisieren.
Dieser soll ab einem bestimmten Punkt einen Zeilenumbruch machen, sodass der Text nicht unendlich nach rechts läuft.
Habe es jetzt so gelöst, das es für die ersten 5 Zeilen funktionieren würde, wenn der Text aber länger als 5 Zeilen ist funktioniert es wider nicht, und ich müsste es für unendlich viele Zeilen umsetzen, was ja nicht möglich ist.
Diesen Aufbau habe ich für die ersten 5 Zeilen gewählt.
i ist die Lauf variable, die Position des Zeichens im Text enthält, welches gerade ausgegeben wird.
Der String wird Buchstabe für Buchstabe ausgegeben, und daher ist bekannt, an welcher Position es sich im Text befindet.
80 und 100 ist die Position im Text, also zurzeit frage ich ob sich i zwischen 80 und 100 (bzw später 180 und 200 usw) befindet, ob sich an der stelle ein Leerzeichen befindet, und ob schon ein Zeilenumbruch in der Zeile gemacht wurde.
Sollten alle Bedingungen erfühlt sein, wird an dieser Textpostion ein Zeilenumbruch durch /n erzwungen, i um 1 zurückgesetzt, damit die Zeichenposition im String wider stimmt, und die Ausgabe keine Zeichen verschluckt.
Habe keine Idee, wie ich das für unendlich viele Zeichen umsetzen könnte.
i Läuft solange wie es Zeichen im Text gibt, habe mir schon überlegt, ob ich mit Modulo fragen kann, wo sich i befindend, ,also i%100 == 0bzw (i-20)%80 == 0
Aber dann habe ich nur genau diese zwei Positionen im Text, aber nicht zwischen genau diesen.
Glaube aber das es sowieso der falsch Ansatz ist, und ich mich jetzt noch Stunden (Tage) daran aufhalten werden.
Daher frage ich jetzt einfach mal, ob ihr noch eine Idee habt.
Schonmal Danke für eine Antwort
Mfg
Power-Poler
Hänge gerade an einem kleineren größeren Problem
Und zwar versuche ich eine Textausgabe für einen beliebig langen String zu realisieren.
Dieser soll ab einem bestimmten Punkt einen Zeilenumbruch machen, sodass der Text nicht unendlich nach rechts läuft.
Habe es jetzt so gelöst, das es für die ersten 5 Zeilen funktionieren würde, wenn der Text aber länger als 5 Zeilen ist funktioniert es wider nicht, und ich müsste es für unendlich viele Zeilen umsetzen, was ja nicht möglich ist.
if (i>80 && i<100 && Text.equals(" ") && Zeile1){
oben.replaceText("\n", i-1, i-1);
Zeile1 = false;
Diesen Aufbau habe ich für die ersten 5 Zeilen gewählt.
i ist die Lauf variable, die Position des Zeichens im Text enthält, welches gerade ausgegeben wird.
Der String wird Buchstabe für Buchstabe ausgegeben, und daher ist bekannt, an welcher Position es sich im Text befindet.
80 und 100 ist die Position im Text, also zurzeit frage ich ob sich i zwischen 80 und 100 (bzw später 180 und 200 usw) befindet, ob sich an der stelle ein Leerzeichen befindet, und ob schon ein Zeilenumbruch in der Zeile gemacht wurde.
Sollten alle Bedingungen erfühlt sein, wird an dieser Textpostion ein Zeilenumbruch durch /n erzwungen, i um 1 zurückgesetzt, damit die Zeichenposition im String wider stimmt, und die Ausgabe keine Zeichen verschluckt.
Habe keine Idee, wie ich das für unendlich viele Zeichen umsetzen könnte.
i Läuft solange wie es Zeichen im Text gibt, habe mir schon überlegt, ob ich mit Modulo fragen kann, wo sich i befindend, ,also i%100 == 0bzw (i-20)%80 == 0
Aber dann habe ich nur genau diese zwei Positionen im Text, aber nicht zwischen genau diesen.
Glaube aber das es sowieso der falsch Ansatz ist, und ich mich jetzt noch Stunden (Tage) daran aufhalten werden.
Daher frage ich jetzt einfach mal, ob ihr noch eine Idee habt.
Schonmal Danke für eine Antwort
Mfg
Power-Poler
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 207570
Url: https://administrator.de/forum/text-zeilenweise-ausgeben-207570.html
Ausgedruckt am: 21.02.2025 um 12:02 Uhr
4 Kommentare
Neuester Kommentar
Hallo,
also die Position des möglichen, neuen Zeilenumbruchs ist doch Variable... warum verwendest du dann keine Variablen ?
Hm... und wenn 20 Zeichen als Spielraum nicht ausreichen ? (s. Zeile 3 meines Codes, so geschrieben __sind es__ 20 Zeichen !) (21 Zeichen wenn ich "ä" gegen "ae" tausche
)
Sollte so (oder so ähnlich) doch funktionieren 
...ein Bisschen aufgeräumter...
~Arano
also die Position des möglichen, neuen Zeilenumbruchs ist doch Variable... warum verwendest du dann keine Variablen ?
Hm... und wenn 20 Zeichen als Spielraum nicht ausreichen ? (s. Zeile 3 meines Codes, so geschrieben __sind es__ 20 Zeichen !) (21 Zeichen wenn ich "ä" gegen "ae" tausche
$txtLenth = strlen( $langertext );
$l = 80; // Zeilen_L_änge
$z = 20; // Zeilenlängen_Z_ugabe
$a = $l;
$b = $a+$z;
for( $i=0; $i<$txtLenth; ++$i )
{
if( $i>$a && $i<$b && Text.equals(" ") )
{
echo "Leerzeichen gefunden an $i, zwischen Position $a bis $b";
// ...ersetze Leerzeichen durch Zeilenumbruch...
$a = $i+$l; // neue Startposition = aktuelle Position plus Mindestzeilenlänge
$b = $a+$z; // neue Endposition = neue Startposition plus Zugabe
continue; // ...um mit dem nächstem Schleifendurchlauf zu beginnen... Zeilenumbruch wurde ja erzeugt !
}
// Notfall Zeilenumbruch... ( $i IST größer als $b )
if( $i>$b )
{
// ...füge Zeilenumbruch ein...
$a = $i+$l;
$b = $a+$z;
}
}
...ein Bisschen aufgeräumter...
$txtLenth = strlen( $langertext );
$l = 80; // Zeilen_L_änge
$z = 20; // Zeilenlängen_Z_ugabe
$a = $l;
$b = $a+$z;
for( $i=0; $i<$txtLenth; ++$i )
{
if( $i<$a ) // die Zeichen vor Position $a interessieren uns nicht
continue;
// ab hier ist $i immer größer als $a
if( $i>$b ) // sollte $i tatsächlich mal größer als $b sein
{
// NOTFALL Zeilenumbruch
$a = $i+$l;
$b = $a+$z;
continue;
}
// ab hier ist $i immer zwischen/an Position $a bis $b
if( Text.equals(" ") ) // wenn Leerzeichen gefunden...
{
echo "Leerzeichen gefunden an $i, zwischen Position $a bis $b";
// ...ersetze Leerzeichen durch Zeilenumbruch...
$a = $i+$l; // neue Startposition = aktuelle Position plus Mindestzeilenlänge
$b = $a+$z; // neue Endposition = neue Startposition plus Zugabe
}
}
~Arano