Dominique Stender: zeichenketten durchsuchen

Hallo!

Ich habe mal wieder ein Problem mit Perl.
Und zwar habe ich eine beliebige Zahl einer bestimmten Form.
Am Anfang steht eine beliebige Anzahl Nullen (evtl auch 0 Nullen), dahinter eine beliebige Ziffernfolge, die evtl auch Nullen enthalten kann. Ich muß die Zahl so modifizieren, daß genau der zweite Teil übrig bleibt:
00012231   ----> 12231
00012201   ----> 12201
22231000   ----> 22231000

Mir kamen schon index und rindex in den Sinn, diese scheinen mir aber nicht geeignet, weil ja auch in dem zweiten Teil der Zahl Nullen enthalten sein können.

Ich bin sicher Euch fällt wie immer was ein - Danke!!
   Dominique

  1. Hallo Dominique

    00012231   ----> 12231
    00012201   ----> 12201
    22231000   ----> 22231000
    Mir kamen schon index und rindex in den Sinn, diese scheinen mir aber nicht geeignet, weil ja auch in dem zweiten Teil der Zahl Nullen enthalten sein können.

    Da Perl skalare Variablen wahlweise als Zeichenketten oder Zahlen behandelt, kannst du jederzeit regulaere Ausdruecke und damit verbundene Suche-Ersetze-Vorgaenge darauf anwenden.

    Beispiel:
    $Wert = "00012231";
    $Wert =~ s/0*([1-9]*)/$1/;
    print "$Wert\n";

    viele Gruesse
      Stefan Muenz

    1. Phew!
      Noch jemand der um diese unchristliche Zeit schon aktiv ist... danke für die schnelle Hilfe!

      MfG
         Dominique

    2. Hi,

      viele Wege führen nach Rom:

      Beispiel:
      $Wert = "00012231";
      $Wert =~ s/0*([1-9]*)/$1/;

      $Wert =~ s/^0*//;
      $Wert = $Wert + 0; # oder noch besser:
      $Wert += 0;

      print "$Wert\n";

      Ich würde die letzte Methode benutzen, weil sie sicherlich am "billigsten" ist :-)

      Cheatah

      1. Hallo auch!

        viele Wege führen nach Rom:

        Jepp - ich nehme nicht die Straße, sonder das Flugzeug ;-)

        Beispiel:
        $Wert = "00012231";
        $Wert =~ s/0*([1-9]*)/$1/;

        $Wert =~ s/^0*//;
        $Wert = $Wert + 0; # oder noch besser:
        $Wert += 0;

        $Wert =~ s/^0*\B//;

        print "$Wert\n";

        Hier kann man sich das addieren von Null sparen (welches bei 0000 nötig war, da hier ja dummerweise
        ALLE Nullen gelöscht wurden). Der Trick besteht darin, durch \B anzugeben, daß hinter den Nullen
        KEINE Wortgrenze sein soll, wie sie am Ende der Zahl bestünde.

        Jörk