Rolf Rost: Elegante Lösung - String kürzen

Moin,

hab einen sehr langen String in $name, der soll so gekürzt werden, dass die ersten 8 Zeichen, 2 Punkte, die letzten 8 Zeichen dann drinstehen.

12345678..87654321

Habe das bisher ein bischen umständlich gemacht:

# name in ein array verwandeln
 my @a = split //, $name;

# leermachen...
 $name = '';

# und neu zusammensetzen
 for(0..8){ $name .= $a[$_] }
 $name .= '..';
 for(-8..-1){ $name .= $a[$_]}

Geht das auch ein bischen eleganter ?

Gruss, Rolf

--
KnowHow veröffentlichen statt patentieren!
  1. Hi,

    Geht das auch ein bischen eleganter ?

    perldoc -f substr

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. perldoc -f substr

      Hajo, damit gehts au ;-)

      Gruss von der A5, Rolf

      --
      KnowHow veröffentlichen statt patentieren!
  2. Moin, moin!

    Wie wäre es damit:
    $name=~s/(.{8}).*(.{8})/$1..$2/;

    Alles klar?

    Viele Grüße,
    Norbert

    1. Moin, moin!

      Wie wäre es damit:
      $name=~s/(.{8}).*(.{8})/$1..$2/;

      Cool ;-! Das können wir noch verbessern, Anker setzen:

      $name = ~s/^(.{8}).*(.{8})$/$1..$2/;

      Alles klar?

      Si!

      Gruss, Rolf

      --
      KnowHow veröffentlichen statt patentieren!
      1. Nochmals moin, moin!

        Ich habe es ohne Anfangs- und Endemarkierung ausprobiert und es scheint zu funktionieren. Was verbessert denn diese Markierungen?

        Norbert

        1. Moin,

          Ich habe es ohne Anfangs- und Endemarkierung ausprobiert und es scheint zu funktionieren. Was verbessert denn diese Markierungen?

          Danke auf jeden Fall!

          Jo, es geht auch ohne die anker. Die jedoch machen die RegEx
          1. besser lesbar für den Scriptauthor
          2. sicherer

          Mit ^anker_vorn ... anker_hinten$ 'passt' der Ausdruck sozusagen genau.

          Gruss, Rolf

          --
          KnowHow veröffentlichen statt patentieren!
      2. Ähm,

        $name = ~s/^(.{8}).*(.{8})$/$1..$2/;

        $name = ~s/^(.{8}).*(.{8})$/$1..$2/;

        :-)

        gruss

        --
        no strict;
        no warnings;
        man google
        1. $name = ~s/^(.{8}).*(.{8})$/$1..$2/;

          oder muss man das gar nicht escapen?

          --
          no strict;
          no warnings;
          man google
          1. Ne, muss man nicht.

            Norbert

          2. hi,

            $name = ~s/^(.{8}).*(.{8})$/$1..$2/;
            oder muss man das gar nicht escapen?

            Im 'Ersetzungsteil' muss der Punkt nicht maskiert werden.

            Gruss, Rolf

            --
            KnowHow veröffentlichen statt patentieren!
            1. danke

              --
              no strict;
              no warnings;
              man google