Michael: Nurmrische und String-Werte umwandeln

Hallo zusammen,

wenn in einem Textfel der Wert "012" oder "003" enthalten ist, wie bekomme ich diesen Wert in eine Numerische Variable ohne die führenden Nullen, sle 12 und 3?

Wie funktioniert das umgekehrt, wenn ich aus einer Zahl in einer Variabe mit dem Wert 3 in ein String mit drei Stellen in "003" und 12 in "012" umwandeln möchte?

Ich habe schon die Funktionen in SelfHTML "abgeklappert" und leider nichts gefunden.
schon mal danke für eure unterstützung.

  1. Hallo Michael,

    wenn in einem Textfel der Wert "012" oder "003" enthalten ist, wie bekomme ich diesen Wert in eine Numerische Variable ohne die führenden Nullen, sle 12 und 3?

    das macht Perl bei Bedarf automatisch, siehe z.B. in der perldoc zu oct.
    Bist Du Dir auch ganz sicher, dass diese Zeichenfolgen keine Oktalzahlen angeben sollen?

    Wie funktioniert das umgekehrt, wenn ich aus einer Zahl in einer Variabe mit dem Wert 3 in ein String mit drei Stellen in "003" und 12 in "012" umwandeln möchte?

    sprintf hilft Dir weiter, eine Möglichkeit wäre beispielsweise:

    $a = sprintf '%.3d', 3;

    Freundliche Grüße

    Vinzenz

    1. Hey,

      wenn in einem Textfel der Wert "012" oder "003" enthalten ist, wie bekomme ich diesen Wert in eine Numerische Variable ohne die führenden Nullen, sle 12 und 3?
      das macht Perl bei Bedarf automatisch

      nein, tut's nicht. Textfelder (CGI, GUI-Toolkits...) werden als Strings übergeben und nicht numerisch. Der Rest mit dem Oktalkram ist irreführend, ein Skalarwert ist nicht dasselbe wie eine Textkonstante!

      Die Frage ist so auch nicht zu beantworten, weil sie schon eine falsche Annahme enthält. Es gibt (aus Sicht eines Anfängers) in Perl keine numerischen Variablen. Stattdessen benutzt man einfach einen Skalar in numerischem Kontext (z.B. Rechenoperation). Um die führenden Nullen aus ästhetischen Gründen zu entfernen, einfach 0 zum Skalar addieren.

      Wie funktioniert das umgekehrt, wenn ich aus einer Zahl in einer Variabe mit dem Wert 3 in ein String mit drei Stellen in "003" und 12 in "012" umwandeln möchte?
      $a = sprintf '%.3d', 3;

      Das Flag . dient zur Rundung. Man benutzt 0 für führende Nullen. Außerdem ist $a ein ganz schlechter Variablenname, da reserviert für sort. Besser:
      my $withleadingzeroes = sprintf '%03d', 3;

      --
      水-金-地-火-木-土-天-海-冥
      1. Hallo

        wenn in einem Textfel der Wert "012" oder "003" enthalten ist, wie bekomme ich diesen Wert in eine Numerische Variable ohne die führenden Nullen, sle 12 und 3?
        das macht Perl bei Bedarf automatisch
        nein, tut's nicht.

        tut mir leid, dass die von mir verlinkte Dokumentation, perldoc, fehlerhaft ist. Ich sah diese immer als Referenz an und zitiere:

        Zitat: (Quelle: perldoc oct)

        Although perl will automatically convert strings into numbers as needed,
            this automatic conversion assumes base 10.

        was genau das vom OP gewünschte Verhalten ist. Genau aus diesem Grund habe ich auf genau diesen Ausschnitt der Doku verwiesen.

        Um die führenden Nullen aus ästhetischen Gründen zu entfernen, einfach 0 zum Skalar addieren.

        Ja, nichts anderes stand sinngemäß in meinem Posting. Mit einem hübschen Verweis zur Doku.

        $a = sprintf '%.3d', 3;
        Das Flag . dient zur Rundung.

        Weitere Korinthe gefällig:
        Das Flag . dient zur Angabe der Genauigkeit.

        Und
        Zitat: (Quelle: perldoc sprintf)

        For integer conversions, specifying a precision implies that the
            output of the number itself should be zero-padded to this width:

        Ich verwendete gezielt eine Integer. Ich verwies gezielt auf die Doku.

        Außerdem ist $a ein ganz schlechter Variablenname, da reserviert für sort.

        Da habe ich noch ein paar Korinthen zuzugeben:
        $a ist ein so schlechter Variablenname, dass er in der perldoc zu sprintf selbst verwendet wird, siehe http://perldoc.perl.org/functions/sprintf.html#order-of-arguments :-)

        Besser:
        my $withleadingzeroes = sprintf '%03d', 3;

        Ach, ich gebe Dir ja recht.

        Grüße

        Vinzenz