| Die Standard-Funktionen printf() und sprintf() werden von allen modernen Programmiersprachen angeboten. | Man kann damit vielfältig formatierte Texte (Strings) aus konstanten und variablen Teilen erzeugen. |
Programmierung |
mit Perl, PHP |
| Syntax | der Funktionen printf und sprintf |
| Platzhalter | Aufbau und Funktion eines Platzhalters |
| Ganze Zahlen | Vorzeichen, Füllzeichen, Länge, Internes Format |
| Gleitkomma-Zahlen | Genauigkeit, Komma-Punkt/Beistrich, Exponential-Format |
| Zahlen-Systeme | Hexadezimal, Dezimal, Octal, Binär für ganze Zahlen |
| Zeichen | ASCII-Zeichen, Unicode-Zeichen |
| IT-Beispiele | Datum, Zeit, Farben (CSS), Sonderzeichen (Unicode) |
| Verwandte Themen | printf() mit C/C++, Codierung & Decodierung mit pack() & unpack(), Umwandlung verschiedener Zahlen-Systeme. |
Syntax der Funktionen printf() und sprintf() |
|
Zweck• Funktion printf() gibt den erzeugten Text (String) an den Ausgabe-Kanal aus: Das ist bei PHP meist der QuellText einer Webseite, bei Perl oft auch ein Konsolen-Fenster.• Funktion sprintf() gibt den erzeugten Text an eine (String)-Variable zurück. Das ist sinnvoll, wenn der Text im Programm weiter bearbeitet werden soll. • Beide Funktionen werden in den Programmiersprachen → Perl und → PHP praktisch genau gleich verwendet. In der Programmiersprache → C/C++ werden sie mit der gleichen Bedeutung, jedoch geringfügig anderer Syntax verwendet. |
Syntax
printf("format", $arg1, $arg2, ...);
$string = sprintf("format", $arg1, $arg2, ...); ● Der obligatorische "format"-String ist eine Art Mini-Programm, in welchem festgelegt wird, wie der zu erzeugende Text formatiert werden soll. ● Alle weiteren folgenden Argumente sind optional: Man braucht sie für allfällige variable Bestandteile des Ausgabe-Strings. |
String-KonstanteIm einfachsten Fall besteht der zu erzeugende Text nur aus fixen (konstanten) Bestandteilen. In diesem Fall ist der Text zur Gänze im Format-String enthalten, und man braucht keine weiteren Argumente.• In den meisten Fällen wird der Format-String mit der Escape-Folge \n (für 'Neue Zeile') abgeschlossen. • In PHP-Anwendungen enthält der Ausgabe-Text oft auch HTML-Elemente. |
Beispiel
printf("Ein Seiten-Titel\n");
Ausgabe (an den Ausgabe-Kanal):
printf("Ein <b>HTML</b> Element <br />\n");
Ein Seiten-Titel
Ausgabe der 2. Zeile auf einer Webseite:
Ein <b>HTML</b> Element <br /> Ein HTML Element
|
Variable Bestandteile• Der Format-String enthält in diesem Fall einen oder mehrere ↓ Platzhalter:Das sind besonders bezeichnete Text-Marken, die bei Ausführung des Programms durch den aktuellen Wert einer Variablen ersetzt werden. • Alle dazu benötigten Variablen müssen nach dem Format-String als Argumente der Funktion folgen. Im Beispiel rechts enthält der Format-String den Platzhalter %d mit der Bedeutung: 'Ganze Dezimalzahl'. • Bei jeder Anwendung der Funktion (hier in einer Schleife) wird der Platzhalter durch den aktuellen (!) Wert der Variablen $i ersetzt. |
Beispiel
for($i=0;$i<=3;$i++) {
Ausgabe:
printf("i=%d \n",$i);
}
i=0
Der Format-String enthält die konstanten
Bestandteile "i="
und "\n" - sie kommen in
jeder Anwendung vor.i=1 i=2 i=3 Der Platzhalter %d wird dagegen durch jenen Wert ersetzt, den die angegebene Variable $i jeweils gerade hat. |
Formatierung von ganzen Zahlen |
|||||||||||||||||||||||||
Ganze Dezimalzahlen• Negative Zahlen erhalten automatisch das - Vorzeichen.• Bei positiven Zahlen kann man mit + ein Vorzeichen erzwingen. • Das Vorzeichen kostet jeweils 1 Zeichen der Breite. • Als Füllzeichen sind nur 0 oder Leerzeichen sinnvoll. • Wenn die gewünschte Breite nicht ausreicht, dann werden die Zahlen nicht abgeschnitten (Beispiel 12345). • Die Darstellung in anderen Zahlensystemen ↓ (Hex, Oct, Bin) ist möglich. |
|
||||||||||||||||||||||||
UnsignedDie Darstellung des internen Zahlen-Formats ist nur in der Informatik üblich und verständlich !Die ganze Zahl wird in der zum Speichern verwendeten Wort-Breite dargestellt, normalerweise mit 4 Byte = 32 Bit. Das bedeutet: • Positive Zahlen bis 232-1 werden genauso dargestellt wie mit "%d" • Von größeren positive Zahlen werden die überzähligen Bits abgeschnitten. • Negative Zahlen werden im → 2er-Komplement dargestellt. |
|
||||||||||||||||||||||||
Formatierung von Gleitkomma-Zahlen |
|||||||||||||||||
Standard Gleitkomma Darstellung• Mit %f werden die meisten Gleitkomma-Zahlen formatiert. Nach Angabe der Länge folgt ein (Dezimal)-Punkt und die Anzahl der Nachkomma-Ziffern.• Die Präzision (Zahl nach dem Punkt) bezeichnet die Anzahl der Nachkomma-Stellen. • Wenn die gewünschte Breite nicht ausreicht, dann werden die Zahlen (vor dem Komma) nicht abgeschnitten. Man kann das ausnutzen, um eine variable (minimale) Breite bei fixer Präzision (Kommastellen) zu erreichen. |
|
||||||||||||||||
Dezimal-Trennzeichen• International wird nur der Komma-Punkt verwendet.• Lediglich im deutschen Sprachraum ist ein Komma-Beistrich üblich. Das verursacht zahlreiche Probleme und Fehler, und kostet viel Zeit & Geld ... • Theoretisch sollte %F das internationale, %f das nationale Komma-Zeichen liefern. Wegen der zahlreichen Verwechslungen sind jedoch fast alle Systeme so konfiguriert, dass immer das internationale Zeichen (Punkt) erzeugt wird. • Bei Verwendung (von Perl oder PHP) am Webserver würde dessen Konfiguration verwendet, nicht jene am Client-PC ! ♣ Tipp: Formatieren sie immer mit Dezimal-Punkt und wandeln sie den String bei Bedarf mit einem → Regulären Ausdruck um. |
$r = pi();
Ergebnis: $sc = '3,141593'
$sp = sprintf('%f',$r); // Perl:
$sc = $sp; $sc =~ s/\./,/;// PHP:
$sc = preg_replace('/\./',',',$sp);
|
||||||||||||||||
ProzentDas Wort "Prozent" bedeutet "von Hundert". Zahlen-Werte 0..1 entsprechen daher 0%..100%In gängigen Programmiersprachen muss man die %-Zahlenwerte durch Multiplikation *100 selbst berechnen ! ♣ Kalkulations-Programme (LibreOffice, OpenOffice, Excel, ...) arbeiten unterschiedlich - Dort bleiben die Zahlen-Werte erhalten, die Formatierung betrifft nur die Darstellung. |
|
||||||||||||||||
Einheiten• Zusätzliche Angaben werden als Klartext in den Format-String eingefügt.• Dabei kann man auch Variable (hier $u) verwenden. • Vorsicht mit Sonderzeichen wie µ € usw.: Man kann sie je nach Zeichensatz unterschiedlich codieren. Beispiele im Kapitel ↓ Unicode dieser Seite. • Bei Währungen wird die Einheit manchmal vorangestellt. In diesem Fall muss man die Feld-Breite angeben. ♦ Details zu Zeichen-Codes (ASCII, HTML, Unicode) |
|
||||||||||||||||
Exponential-Format• Mit %e werden Zahlen im 'wissenschaftlichen Format' dargestellt, d.h. als Gleitkomma → Mantisse mit Dezimal → Exponent.Dieses Format eignet sich besonders für sehr kleine oder sehr große Zahlen. Ein Nachteil ist der vergleichsweise große Bedarf an 'Overhead' (Vorzeichen der Mantisse, Dezimalpunkt, e, Vorzeichen des Exponenten). Man muss daher für die Breite (Anzahl aller Zeichen) meist mehr Zeichen vorsehen. • Die Präzision (Zahl nach dem Punkt) bezeichnet die Anzahl signifikanter Ziffern und muss >0 sein. Da genau 1 Ziffer vor dem Komma steht, ist die Anzahl der Nachkomma-Stellen um -1 geringer. ♣ Tipp: Ausreichend Breite vorsehen, meist >=10 Zeichen ! |
|
||||||||||||||||
|
Auch Strings im Exponential-Format lassen sich nachträglich ändern. Zunächst wird ein String $sp der gewünschten Präzision erzeugt. Der String wird mit einem → Regulären Ausdruck in 3 Teile geteilt: • Vorzeichen und 1. Ziffer der Mantisse (vor dem Punkt) • Rest der Mantisse (Nachkomma-Stellen) • Exponent inkl. Vorzeichen Danach wird der String erneut zusammengesetzt. Im Beispiel werden dabei folgende Details geändert: • Dezimal-Beistrich statt Punkt • Exponent mit E statt e • Exponent fixer Länge (hier 3 Stellen) Alternativ man die Strings auch komplett selbst erzeugen: Trennung einer Zahl in Mantisse und Exponent, Formatierung beider Teile, Zusammenfügen der Strings. |
Beispiel: Dezimal-Beistrich und 3stelliger Exponent (PHP):
$x = 10 * pi();
$sp = sprintf('%e',$x); // $sp = '3.14159e+1'
$re = "/^([^\.]*)\.([^e]*)e(.*)$/";if( preg_match($re, $sp, $regs) ) {
$m1 = $regs[1]; // 3
}
$m2 = regs[2]; // 14159 $e = regs[3]+0; // +1 $e2 = sprintf('%+04d',$e) $sc = $m1.','.$m2.$e2;
// $sc = '3,14159E+001'
|
||||||||||||||||
Zahlen-Systeme (Dec, Hex, Oct, Bin) |
||||||||||||||||||||||||||
Zahlen-SystemeGanze Zahlen kann man in allen für die Informatik wichtigen Zahlen-Systemen darstellen:• Mit %d wird die Zahl als Dezimal-Zahl (Basis 10) dargestellt. Tipp: Keine führende Nullen verwenden, sonst oft Verwechslung mit Octal-Zahlen. Im Zweifel einen Punkt nachstellen. • Mit %X werden Hexadezimal-Zahlen (Basis 16) dargestellt. Zur Kennzeichnung wird entweder # oder 0x vorangestellt. Man verwendet immer eine fixe Breite (2,4,8 Zeichen) und führende Nullen. %x ergibt kleine Buchstaben für die Ziffern a..f • Mit %o werden Octal-Zahlen (Basis 8) dargestellt. Zur Kennzeichnung wird 0 (Null) vorangestellt. Vorsicht - Das gibt oft Anlass zu falscher Interpretation ! • Mit %b werden Binär-Zahlen (Basis 2) dargestellt. Tipp: Verwenden sie immer eine fixe Breite (Vielfache von 4 oder 8) und trennen sie die Zeichen-Gruppen mit Leerzeichen. - Das erfordert ein eigenes kleines Programm. ♦ Details zu Zahlen-Systemen. |
|
|||||||||||||||||||||||||
DecodierungZur Decodierung (z.B. Hex -> Dec) verwendet man am besten die Perl Funktionen → pack() und unpack(), die auch von PHP geboten werden. |
Darüber hinaus bieten die einzelnen Programmiersprachen zahlreiche
uneinheitliche Funktionen an, z.B. Javascript (parseInt()),
PHP (bindec(), hexdec(), octdec(), base_convert()) ♦ Details zu pack() und unpack() sowie allgemein zur Programmierung veschiedener Zahlensysteme. |
|||||||||||||||||||||||||
Zeichen |
|||||||||||||||
|
Mit %c wird das Argument (Ganze Zahl) als ASCII-Zeichen
codiert. Beschränken sie daher die Zahl auf 0..127
oder noch besser auf 32..126 (druckbare Zeichen
ohne Steuerzeichen). ♣ Tipp: Zusätzlich kann man auch (mindestens 65000) → Unicode-Zeichen verwenden. Diese müssen je nach Anwendung unterschiedlich codiert werden. ↓ Beispiele zur Codierung von Unicode-Zeichen für HTML und Javascript. ♦ Details zum ASCII Zeichen-Code |
|
||||||||||||||
Beispiele |
|||||||||||||||||
Datum & ZeitDas Beispiel zeigt die aktuellen Daten im Standard → ISO-8859 Format.♣ Tipp: Verwenden sie nach Möglichkeit Formate mit fixer Anzahl von Zeichen - In diesem Fall immer mit Angabe der Breite und mit führenden Nullen. ♣ Vorsicht bei der Analyse solcher Strings: Zahlen mit führenden Nullen werden ohne zusätzliche Maßnahmen meist als ↑ Octal-Zahlen interpretiert ! ♦ Details zum Thema Datum & Zeit |
|
||||||||||||||||
Farbenwerden normalerweise aus den Anteilen der 3 "Grundfarben" Rot, Grün, Blau (RGB) zusammengesetzt. Jeder der 3 Farb-Werte wird durch eine ganze Zahl 0..255 bezeichnet.Das Beispiel zeigt die Codierung in den beiden meist verwendeten Formaten für → CSS. ♦ Details zum Thema Farben |
|
||||||||||||||||
Unicodeist ein Standard zur Darstellung 'aller' weltweit verwendeten Zeichen. Die meisten IT-Systeme können zumindest die ersten 65000 Zeichen verwenden. - Das entspricht einer 4-stelligen Hexadezimal-Zahl #0000..#FFFFDas Beispiel zeigt die übliche Unicode-Kennzeichnung mit U+, die HTML-Codierung und die Javascript-Codierung. Ganz rechts die reale Darstellung des Zeichens. ♦ Details zum Thema Unicode |
|
||||||||||||||||
|