Oliver Antosch: Umbrüche in Formular umsetzen

Hallo,

auf meiner Website kann man in einem Formular Daten eingeben,
die dann per Email (Perl Skript) verschickt werden. Ich will das
nach so-und-so-vielen Zeichen Umbrüche eingebaut werden.
Mit wrap="physical" bin ich leider nicht fündig geworden.

  1. Hallo,

    auf meiner Website kann man in einem Formular Daten eingeben,
    die dann per Email (Perl Skript) verschickt werden. Ich will das
    nach so-und-so-vielen Zeichen Umbrüche eingebaut werden.
    Mit wrap="physical" bin ich leider nicht fündig geworden.

    Hi Oliver!

    Probier's doch mal mit

    $text =~ s/(.{0,10}\w)\s/$1\n/g;

    Die 10 steht hier für so-und-so-viele Zeichen minus 1. Der Text würde also umgewandelt
    werden, in einen Text mit höchstens 11 Zeichen pro Zeile. Es sein denn es gibt dort ein
    Wort, welches länger ist als 11 Zeichen:

    123 123456789012345 123 12345 1234

    wird zu

    123
    123456789012345
    123 12345
    1234

    Möchtest Du, daß mehrere Leerzeichen durch einen Zeilenumbruch ersetzt werden, so ersetzte
    \s durch \s+

    123 12345  1234

    wird dann zu

    123 12345
    1234

    anstelle von
    123 12345
    1234

    Viel Spaß damit,
       Jörk

    1. $text =~ s/(.{0,10}\w)\s/$1\n/g;

      Die 10 steht hier für so-und-so-viele Zeichen minus 1. Der Text würde also umgewandelt
      werden, in einen Text mit höchstens 11 Zeichen pro Zeile. Es sein denn es gibt dort ein
      Wort, welches länger ist als 11 Zeichen:

      123 123456789012345 123 12345 1234

      wird zu

      123
      123456789012345
      123 12345
      1234

      der Ansatz war schon ganz gut, allerdings musste ich es etwas abändern:

      $in{text} =~ s/(.{1,80}[a-zA-Z:,0-9öüä\s])\s/$1\n/g;
          $in{text} =~ s/\n\n/\n/g;

      die erste Zeile berücksichtigt, das z.B. auch ein Doppelpunkt vorkommen könnte.
      Außerdem das eine Zeile nicht bis zum Ende ausgeschrieben sein kann. Der Text
      wär somit ok, wenn man das Skript lokal ausführt, schickt man das ganz jedoch
      mit sendmail, dann wird aus einer Leerzeile eine doppelte Leerzeile (weiss jemand warum?)
      Daher noch  $in{text} =~ s/\n\n/\n/g; um die Doppelleerzeile in eine Einfachleerzeile zu konvertieren.

      1. $text =~ s/(.{0,10}\w)\s/$1\n/g;

        der Ansatz war schon ganz gut, allerdings musste ich es etwas abändern:

        $in{text} =~ s/(.{1,80}[a-zA-Z:,0-9öüä\s])\s/$1\n/g;
            $in{text} =~ s/\n\n/\n/g;

        die erste Zeile berücksichtigt, das z.B. auch ein Doppelpunkt vorkommen könnte.

        Ich hatte das \w eingesetzt, damit der Text, der zu einer Zeile wird, nicht mit einem Space endet. Besser wäre da vielleicht ein \S gewesen ...
        Ansonsten bezog sich \w nur auf das letzte Zeichen in der Zeile. Wenn Du das letzte Zeichen beliebig gestalten möchtest, so kannst Du auch /(.{1,81})\s/ benutzen.

        Außerdem das eine Zeile nicht bis zum Ende ausgeschrieben sein kann. Der Text
        wär somit ok, wenn man das Skript lokal ausführt, schickt man das ganz jedoch
        mit sendmail, dann wird aus einer Leerzeile eine doppelte Leerzeile (weiss jemand warum?)

        Das sollte wohl an Deiner Variation liegen. Insbesondere das \s in der eckigen Klammer bringt
        hier die Verwirrung. Im Gegensatz zum '.' kann \s auch ein Return matchen ...
        Bsp:
        $text =  "12 3 4 5\n 6 7 8";
        $text =~ s/(.{1,4}[a-zA-Z:,0-9öüä\s])\s/$1\n/g;

        dann wird $text zu
        "12 3\n4 5\n\n6 7 8"

        mit
        $text =~ s/(.{1,4}\S)\s/$1\n/g;
        erhält man
        "12 3\n4 5\n 6 7\n8"

        Daher noch  $in{text} =~ s/\n\n/\n/g; um die Doppelleerzeile in eine Einfachleerzeile zu konvertieren.

        Wird dann hoffentlich hinfällig.

        Jörk

  2. Hallo,

    auf meiner Website kann man in einem Formular Daten eingeben,
    die dann per Email (Perl Skript) verschickt werden. Ich will das
    nach so-und-so-vielen Zeichen Umbrüche eingebaut werden.
    Mit wrap="physical" bin ich leider nicht fündig geworden.

    Hallo,

    machs doch einfach mit der CGI-LIB.PL, geht so:

    require "cgi-lib.pl";
    ReadParse();

    Zeilenumbrüche übernehmen

    $in{'Textarea'} =~ s/\n/<br>/g;

    Sommerliche Grüße aus EF, Rolf