power-poler
Goto Top

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.

			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

Content-Key: 207570

Url: https://administrator.de/contentid/207570

Printed on: April 24, 2024 at 04:04 o'clock

Member: Arano
Arano Jun 05, 2013 updated at 17:48:01 (UTC)
Goto Top
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 face-wink )
$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;
    }
}
Sollte so (oder so ähnlich) doch funktionieren face-smile

...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
Member: Power-Poler
Power-Poler Jun 05, 2013 at 19:02:39 (UTC)
Goto Top
Danke, funktioniert einwandfrei, und hat scheinbar gleiche ein anderes Problem mit gelöst, warum weiß ich zwar jetzt nicht, aber die Zeilenumbrüche bleiben beim auslesen erhalten, was sie vorher nicht gemacht haben.
Und ich habe noch einen Fehler im meinem code ausfindig gemacht, das i-1 ist misst.
er gibt zwar alle Zeichen aus, trennt aber mitten im Wort. Ohne das -1 geht es. Naja
Vielen dank für deine Hilfe!
Member: Arano
Arano Jun 05, 2013 at 19:15:17 (UTC)
Goto Top
Hi,

Danke, funktioniert einwandfrei
HA, das freut mich, jetzt kann ich zufrieden schlafen gehen...

Frage noch als gelöst markieren und dann sind auch andere glücklich face-wink


~Arano
Member: Power-Poler
Power-Poler Jun 05, 2013 at 20:09:58 (UTC)
Goto Top
Da war ja was.
Hab ich ganz vergessen, werde ich sofort nachholen face-smile