Edmund Schöpf: fixe Stringlänge in PERL

Wie kann ich einer Variablen in Perl eine fixe Länge aufzwingen?
Z.B. ist die Variable länger als 8 Zeichen, soll sie abgeschnitten werden. Ist sie kürzer als 8 Zeichen, dann sollen zusätzliche Leerzeichen eingefügt werden.

Kennt jemand ein Online Referenz Handbuch für Perl?

Besten Dank für jede Stellungnahme
Edmund

  1. Hallo Edmund,

    Wie kann ich einer Variablen in Perl eine fixe Länge aufzwingen?
    Z.B. ist die Variable länger als 8 Zeichen, soll sie abgeschnitten werden. Ist sie kürzer als 8 Zeichen, dann sollen zusätzliche Leerzeichen eingefügt werden.

    sub Mach8
    {
    $String = $_[0];
    if(length($String) > 8) {
       $String = substr($String,0,7);
    }
    elsif(length($String) < 8) {
       for($i = length($String); $i < 8; $i++) {
          $String = $String." ";
       }    
    }
    return $String;
    }

    Aufgerufen werden kann diese Sub-Routine dann:

    $Test1 = Mach8("wenig");
    $Test2 = Mach8("sehrviel");
    $Test3 = Mach8("vielzuviel");

    Das ist jetzt einfach aus'm Bauch raus geschrieben, koennen also Fehler drin sein.

    viele Gruesse
      Stefan Muenz

    1. Hi,

      sub Mach8
      {

      »»  $String = $_[0];
      »»  if(length($String) > 8) {

      $String = substr($String,0,7);

      müßte das nicht ",0,8" sein? Naja, ein kurzer Test und... :-)

      »»  }
      »»  elsif(length($String) < 8) {

      for($i = length($String); $i < 8; $i++) {
            $String = $String." ";
         }

      oder:
      while(length($String) < 8) { $String .= " "; }  # bzw. $String = " ".$String; wenn die Leerzeichen links stehen sollen

      Um die Routine an beliebige Längen anzupassen, mußt Du nur jede 8 durch "$_[1]" ersetzen bzw. die 7, wenn sie stimmt, durch "$_[1]-1". Es empfiehlt sich in dem Fall natürlich, die Routine "sub Mach" zu nennen. Der Aufruf erfolgt dann mit $Test = Mach("Das ist der Text",42); für Justierung auf 42 Zeichen.

      Cheatah

      1. Hallo auch ...

        Hi,

        sub Mach8
        {
        »»  $String = $_[0];
        »»  if(length($String) > 8) {
           $String = substr($String,0,7);

        müßte das nicht ",0,8" sein? Naja, ein kurzer Test und... :-)

        »»  }
        »»  elsif(length($String) < 8) {

        for($i = length($String); $i < 8; $i++) {
              $String = $String." ";
           }

        oder:
        while(length($String) < 8) { $String .= " "; }  # bzw. $String = " ".$String; wenn die Leerzeichen links stehen sollen

        Um die Routine an beliebige Längen anzupassen, mußt Du nur jede 8 durch "$_[1]" ersetzen bzw. die 7, wenn sie stimmt, durch "$_[1]-1". Es empfiehlt sich in dem Fall natürlich, die Routine "sub Mach" zu nennen. Der Aufruf erfolgt dann mit $Test = Mach("Das ist der Text",42); für Justierung auf 42 Zeichen.

        Cheatah

        wie wäre es denn mit:

        sub Mach
        {
            substr( $_[0] . ' 'x$_[1], 0, $_[1]);
        }

        ;-)
        Gruß,
           Jörk

        1. Hi,

          sub Mach
          {
              substr( $_[0] . ' 'x$_[1], 0, $_[1]);
          }

          und so optimieren wir uns immer weiter... Gratulation, kürzer kriegt es wohl kaum einer hin!

          Dabei fallen mir zwei wichtige allgemeingültige Aussagen ein:
          1.) Jedes Programm enthält mind. einen Bug.
          2.) Jedes Programm läßt sich um mind. eine Anweisung reduzieren.
          Schlußfolgerung: Jedes Programm läßt sich auf eine einzelne Anweisung reduzieren, die fehlerhaft ist!

          Bei Microsoft habe ich manchmal das Gefühl, sie haben Punkt 1 unterstrichen und wollten von Punkt 2 das Gegenteil beweisen... :-)

          Cheatah