Frage

Ich möchte Perl benutzen sprintf zerofill eine Variable.

sprintf("%08d", $var);

Aber ich möchte dynamisch bestimmen, wie viele Stellen ZEROFILL.

Wie ersetze ich die "8" in sprintf("%08d", $var) mit einer Variablen namens $zerofill?

War es hilfreich?

Lösung

Das erste Argument für sprintf ist nur eine Zeichenfolge:

 my $zerofill = 9;
 my $number = 1000;
 my $filled = sprintf "%0${zerofill}d", $number;

Beachten Sie die Klammern Satz auseinander den Variablennamen aus dem Rest der Zeichenfolge.

Wir haben dieses besondere Problem als leicht kluge Übung in Learning Perl Menschen daran zu erinnern, dass Strings nur Strings. :)

Doch wie mobrule weist in seiner Antwort , sprintf viele Funktionen, die Ihnen diese Art von Flexibilität zu geben. Die Dokumentation für eine solche scheinbar einfache Funktion ist ziemlich lang und es gibt viele gute Sachen drin.

Andere Tipps

sprintf und printf Unterstützung der * Notation (dies seit mindestens 5,8 gearbeitet hat):


printf "%0*d", 9, 12345;

000012345

printf '$%*.*f', 8, 2, 456.78;

$  456.78

Ich brauchte etwas, etwas anderes zu tun. Null-Pad ein Gleitkommawert und eine exakte Länge erhalten

In meinem Fall muss ich genau 12 Bytes einschließlich dem Komma. Es ist etwas komplizierter als das, was Sie oben haben. Hier ist es für den Fall, jemand muss diese:

Say $ inputVal ist ein String übergeben von irgendwo mit einem Wert wie 1.001,1 . Beachten Sie, dass es sollte weniger als 12 Zeichen für diese zuverlässig arbeiten

 # This will give us extra zeros, but the string may be too long
 my $floatVal = sprintf('%*.*f', 12, 12, $inputValue);

 # This will remove any extra zeros
 $result = substr($floatVal, 0, 12);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top