Charles M: Modul/Sub für Zeilenumbruch (für Textausgabe)

Hi, kennt jemand ein Perl-Modul oder hat jemand mal eine sub selbst geschrieben, die einen nach Zeichen-Länge frei definieren Zeilenumbruch bewirkt? Die Befehle sollten also in "print "$text"; folgendes bewirken:

  • $text wird aufgegliedert in Zeilen zu jew. beispielsweise 80 Zeichen
  • der Zeilenumbruch erfolgt nur bei Leerzeichen, nicht mitten im Wort
  • es wird berücksichtigt, dass $text auch HTML-Sonderzeichen enthält (z.B. ß), die im Text dann nur 1 Buchstabe sind.
    Danke für Eure Infos!
    Charles
  1. Hi, kennt jemand ein Perl-Modul oder hat jemand mal eine sub selbst geschrieben, die einen nach Zeichen-Länge frei definieren Zeilenumbruch bewirkt? Die Befehle sollten also in "print "$text"; folgendes bewirken:

    • $text wird aufgegliedert in Zeilen zu jew. beispielsweise 80 Zeichen
    • der Zeilenumbruch erfolgt nur bei Leerzeichen, nicht mitten im Wort

    use Text::Wrap;
    perldoc Text::Wrap

    • es wird berücksichtigt, dass $text auch HTML-Sonderzeichen enthält (z.B. ß), die im Text dann nur 1 Buchstabe sind.

    Das wird meines Wissens so nicht gehen, du musst die HTML Sonderzeichen erst in normale Buchstaben umwandeln dann umbrechen und dann wieder zurückwandeln.

    Struppi.

  2. Halli hallo Charles,

    ich kenn leider so ein Modul nicht, aber wie wäre es hiermit?

      
    my $val = 0;  
    foreach $line (@lines) {  
       foreach $word ( split / /, $line ) {  
          my $len = 1;  
          $len = lenght($word) unless $word =~ /&\w+;/;  
          $val += $len;  
          $word = "<br>$word" if $len > 80;  
       }  
    }  
    
    

    Ich hab es nicht getestet, könnte aber funktionieren.

    Greez,
    opi

    --
    Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|
    1. Hallo,

      verzeih, my $val = 0 gehört in die innere erste foreach Schleife.

      Greez,
      opi

      --
      Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|
    2. Hallo,

      so, ich habe mich ein wenig verhaspelt. Diese Code müsste nahezu ok sein.

        
      foreach my $line (@lines) {  
         my $val = 0;  
         foreach my $word ( split / /, $line ) {  
            my $len = 1;  
        
            # die Länge des Wortes wird nur berechnet,  
            # wenn es kein Umlaut ist, ansonsten +1  
            $len = lenght($word) unless $word =~ /&\w+;/;  
        
            # +1 für das Leerzeichen, welches bei split / /  
            # verloren gegangen ist  
            $val = $val+$len+1;  
            if ($val > 80) {  
               $word = "<br>$word";  
               $val = 0;  
            }  
         }  
      }  
      
      

      Greez,
      opi

      --
      Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|