Volker: Listen in Tabellenform darstellen

Hallo,
kennt jemand eine Möglichkeit in Perl eine Liste @list (Name, Adresse, Telefon) möglichst einfach in einer Tabelle auszugeben, die eine feste Breite hat z.B. DinA4 und wenn der Name/ die Strasse zu lang für die Zeile ist, daß automatisch eine neue Zeile geschrieben wird mit dem Rest des Namens / der Strasse.
Herzlichen Dank.
Beste Grüße
Volker

Format:
Name                   Strasse              Telefon
Beispiel1              Strasse1             287349827498
Beispiel2              dasisteinganzlange   46546546
                       rStrassenname
Beispiel3              Strasse3             2847349827498

  1. Hallo,

    kennt jemand eine Möglichkeit in Perl eine Liste @list (Name, Adresse, Telefon) möglichst einfach in einer Tabelle auszugeben, die eine feste Breite hat z.B. DinA4 und wenn der Name/ die Strasse zu lang für die Zeile ist, daß automatisch eine neue Zeile geschrieben wird mit dem Rest des Namens / der Strasse.

    Das ganze geht mit Formaten (siehe 'perldoc perlform'):

    format STDOUT =
    ^<<<<<<<<<<<<< ^<<<<<<<<<<<<< ^<<<<<<<<<<<<<
    $name,         $strasse,      $telefon
    .

    Die Header ausgeben

    ($name, $strasse, $telefon) = qw(Name Strasse Telefon);
    write;

    Und nun in einer Schleife die drei Variablen befüllen, und mit write ausgeben lassen.

    Gruß,
       Jörk

    1. Danke für die Hilfe, ist sehr nützlich, für die Spaltendarstellung. Gibt es ähnliches für "neue Zeile wenn länger als Formatlänge". Mit Deiner Funktion schneidet er mir einfach den Strassennamen der zu lang ist ab. Ich brauche eine Funktion, die mir dann automatisch eine neue Zeile generiert. Gibt es das? Ansonsten mach ich es eben "per Hand".
      Gruß,
      Volker

      1. Hallo Volker,

        Danke für die Hilfe, ist sehr nützlich, für die Spaltendarstellung. Gibt es ähnliches für "neue Zeile wenn länger als Formatlänge". Mit Deiner Funktion schneidet er mir einfach den Strassennamen der zu lang ist ab. Ich brauche eine Funktion, die mir dann automatisch eine neue Zeile generiert. Gibt es das? Ansonsten mach ich es eben "per Hand".

        Uups, das hätte eigenlich die Lösung sein sollen ...

        Also noch einmal zum rekapitulieren:
        Die verwendeten <<< sagen, daß der Text linksbündig gesetzt werden soll ( für zentriert und >>> für rechtsbündig).
        Das ^ am Anfang bewirkt, daß die Felder soweit wie möglich gefüllt werden. Der eingesetzte Text wird aus der Variablen herausgeschnitten. (Ein @ anstelle eines ^ würde für ein normales Textfeld stehen).

        Nun zu meinem Fehler:
        Jetzt muß man entweder write so oft aufrufen, bis alle Variablen geleert sind (per if oder while). Oder wenn man von einer maximalen Länge ausgeht, verlängert man das Format:
        format STDOUT =
        ^<<<<<<<<<<<<< ^<<<<<<<<<<<<< ^<<<<<<<<<<<<<
        $name,         $strasse,      $telefon
        ^<<<<<<<<<<<<< ^<<<<<<<<<<<<< ^<<<<<<<<<<<<<
        $name,         $strasse,      $telefon
        ^<<<<<<<<<<<<< ^<<<<<<<<<<<<< ^<<<<<<<<<<<<<
        $name,         $strasse,      $telefon
        .

        Um hierdurch entstehende Leerzeilen zu vermeiden kann man ein ~ in die Formatzeilen setzen. Dieses wird durch ein Leerzeichen ersetzt. ~ bewirkt, daß die Zeile nur ausgegeben wird, wenn sie nicht leer ist:
        format STDOUT =
        ^<<<<<<<<<<<<< ^<<<<<<<<<<<<< ^<<<<<<<<<<<<<
        $name,         $strasse,      $telefon
        ^<<<<<<<<<<<<< ^<<<<<<<<<<<<<~^<<<<<<<<<<<<<
        $name,         $strasse,      $telefon
        ^<<<<<<<<<<<<< ^<<<<<<<<<<<<<~^<<<<<<<<<<<<<
        $name,         $strasse,      $telefon
        .

        Nachtürlich gibt es auch hier eine kürzere Methode:
        ~~ besagt, daß die entsprechende Zeile sooft auszugeben ist, bis sie eine Leerzeile ist. voila:
        format STDOUT =
        ^<<<<<<<<<<<<< ^<<<<<<<<<<<<< ^<<<<<<<<<<<<<~~
        $name,         $strasse,      $telefon
        .

        Gruß,
           Jörk

        Hoffentlich habe ich diesesmal nicht wieder was übersehen ...

        1. Hoffentlich habe ich diesesmal nicht wieder was übersehen ...

          Danke für Deine Mühe, bis jetzt habe ich noch nicht alles ausprobiert, komme wahrscheinlich erst morgen dazu. Aber im voraus einfach mal: vielen Dank.
          Beste Grüße
          Volker