Hin und wieder kommt es vor, daß Zeichenketten oder Zahlen in den Druckdaten anders formatiert sind, als sie Ausdruck später erscheinen sollen. Zeichenketten müssen entweder gekürzt oder auf eine feste Länge erweitert werden. Zahlen müssen in vielfältiger Weise umformatiert werden: z.B. feste Anzahl Nachkommastellen oder Ausgabe mit Dreiergruppen in den Vorkommastellen zur Verbesserung der Lesbarkeit.
In den Schablonen von Feldern, in die Nutzdaten, die mit Hilfe regulärer Ausdrücke erfasst worden sind, eingefügt werden, wird nach der Angabe, welcher Ergebnispuffer verwendet werden soll, mit einem weiteren Doppelpunkt abgetrennt eine Formatangabe angefügt.
Eine solche Formatangabe ist analog den bekannten Formatierungssequenzen aus diversen Programmiersprachen aufgebaut und besteht im Prinzip aus vier Bestandteilen: Indikator, Weite, Genauigkeit und Typ.
Der erste optionale Teil einer Formatangabe gibt mit einem Zeichen an, wie die nachfolgenden Angaben zur Weite und Genauigkeit zu interpretieren sind.
Indikator | Bedeutung |
---|---|
- | Richtet das Ergebnis links innerhalb der angegebenen Feldweite aus. Standardmäßig wird rechts ausgerichtet. |
+ | Verwendet ein Vorzeichen (+ oder -) als Präfix des Ausgabewerts, wenn es sich um einen Typ mit Vorzeichen handelt. Standardmäßig wird nur bei negativen Werten ein Vorzeichen gedruckt. |
0 | Wenn eine Null vorangestellt wird, werden führende Nullen hinzugefügt, bis die Mindestbreite erreicht ist. Wenn ein Minuszeichen vorangestellt ist, oder eine Genauigkeit angegeben ist, wird der Indikator Null ignoriert. Standardmäßig wird die Feldweite mit Leerzeichen aufgefüllt. |
Leerstelle | Bei Zahlen wird bei positivem Vorzeichen eine Leerstelle ausgegeben. Standardmäßig wird nur das negative Vorzeichen gedruckt. |
In einer Formatangabe ist das zweite optionale Feld die Weitenangabe. Die Weite ist eine nicht negative ganze Dezimalzahl, die die Mindestanzahl der auszugebenden Zeichen steuert. Wenn die Anzahl der Zeichen im Ausgabewert kleiner als die angegebene Weite ist, werden Leerzeichen links oder rechts vom Wert - abhängig vom Indikator für Linksausrichtung - hinzugefügt, bis die angegebene Mindestbreite erreicht ist. Wenn der Weite das Zeichen Null als Indikator vorangestellt wird, werden führende Nullen zu Ganzzahl- oder Gleitkommakonvertierungen hinzugefügt, bis die Mindestbreite erreicht ist.
Die Weitenangabe wird niemals dazu führen, daß ein Wert abgeschnitten wird. Wenn die Anzahl der Zeichen im Ausgabewert größer als die angegebene Weite ist oder wenn keine Weite angegeben ist, werden alle Zeichen des Werts ausgegeben.
In einer Formatangabe ist das dritte optionale Feld die Genauigkeitsspezifikation. Sie besteht aus einem Punkt (.) gefolgt von einer nicht negativen ganzen Dezimalzahl, die, abhängig vom Typ, die Anzahl von Zeichen, die Anzahl an Dezimalstellen oder die Anzahl der signifikanten Ziffern angibt.
Anders als die Breitenangabe kann die Genauigkeitsspezifikation die Verkürzung eines Ausgabewerts oder das Runden eines Gleitkommawerts verursachen.
In der Formatangabe ist der Typ die einzig zwingende Angabe. Die Typangabe legt einerseits fest, wie die Eingangsdaten zu interpretieren sind (Zeichenkette vs Zahl) und wie die Ausgabe konkret aussehen soll.
Typ | Beschreibung |
---|---|
b | Dient der Formatierung von ganzen Zahlen im Binärformat. Die Weite bestimmt die Anzahl der auszugebenden Bytes. Die Weite kann maximal 4 betragen (Weil ganze Zahlen intern mit 32 Bit dargestellt werden). |
B | Dient der Formatierung von Zeichenketten im Binärformat. Die Zeichenkette muss aus einer geraden Anzahl von Hexadezimalziffern bestehen, die jeweils paarweise interpretiert binär ausgegeben werden. |
d | Dient der Formatierung von ganzen Zahlen. Ein eventuell vorhandenes negatives Vorzeichen wird mit ausgegeben. Es kann eine minimale Weite vorgegeben werden. |
x | Dient der Formatierung von ganzen Zahlen im Hexadezimalsystem. Für die sechs zusätzlichen Ziffern wird abcdef verwendet. |
X | Dient der Formatierung von ganzen Zahlen im Hexadezimalsystem. Für die sechs zusätzlichen Ziffern wird ABCDEF verwendet. |
s | Dient der Formatierung von Zeichenketten. Es kann eine minimale Weite vorgegeben werden. |
f | Dient der Formatierung von Gleitkommazahlen. Ein eventuell vorhandenes negatives Vorzeichen wird mit ausgegeben. Es kann eine minimale Weite vorgegeben werden, die alle Ziffern, Vorzeichen sowie den Dezimaltrenner umfasst. Mit der Angabe der Präzision kann die Anzahl der Nachkommastellen eingestellt werden. |
F | Dient der Formatierung von Gleitkommazahlen mit Gruppierung der Vorkommastellen in Tausendergruppen. Ein eventuell vorhandenes negatives Vorzeichen wird mit ausgegeben. Es kann eine minimale Weite vorgegeben werden, die alle Ziffern, Vorzeichen sowie den Dezimaltrenner umfasst. Mit der Angabe der Präzision kann die Anzahl der Nachkommastellen eingestellt werden. |
Innerhalb einer Schablone folgt die Formatangabe der Nummer des Ergebnispuffers. Beispiele für konkrete Inhalte von Schablonen könnten etwa so aussehen:
Schablone | Beschreibung |
---|---|
\Gewicht:1:9.2f | Gibt den ersten Puffer des als Gewicht aufgenommen Werts in Form einer Zahl mit zwei Nachkommastellen aus. Das Feld für diese Ausgabe ist mindestens neun Stellen lang. |
\Gewicht:1:9.2F | Wie vorher, allerdings werden jetzt alle drei Vorkommastellen noch Tausenderpunkte eingefügt. |
\Postleitzahl:1:3b | Der erste Puffer des als Postleitzahl aufgenommenen Wertes wird als drei Byte binär ausgegeben (z.B. im Barcode). |
Hier noch ein paar Beispiele für reine Formatangaben:
Format | Wert | Ausgabe | Beschreibung |
---|---|---|---|
d | 123 | 123 | minimale Länge |
5d | 0 | 0 | mindestens fünf Stellen, rechtsbündig |
5d | 123456789 | 123456789 | mindestens fünf Stellen, rechtsbündig |
5d | -10 | -10 | mindestens fünf Stellen, rechtsbündig |
-5d | 0 | 0 | mindestens fünf Stellen, linksbündig |
-5d | 123456789 | 123456789 | mindestens fünf Stellen, linksbündig |
-5d | -10 | -10 | mindestens fünf Stellen, linksbündig |
05d | 10 | 00010 | mindestens fünf Stellen, rechtsbündig, mit Nullen aufgefüllt |
+5d | 10 | +10 | mindestens fünf Stellen, rechtsbündig, mit Vorzeichen |
-+5d | 10 | +10 | mindestens fünf Stellen, linksbündig, mit Vorzeichen |
x | 123 | 7b | minimale Länge, Kleinbuchstaben |
X | 123 | 7B | minimale Länge, Großbuchstaben |
5X | 123 | 7B | mindestens fünf Stellen, rechtsbündig, Großbuchstaben |
-5x | 2748 | abc | mindestens fünf Stellen, linksbündig, Kleinbuchstaben |
05x | 2748 | 00abc | mindestens fünf Stellen, linksbündig, Kleinbuchstaben, mit Nullen aufgefüllt |
.1f | 10,3456 | 10,3 | minimale Länge, mit einer Nachkommastelle |
.2f | 10,3456 | 10,35 | minimale Länge, mit zwei Nachkommastellen, gerundet |
8.2f | 10,3456 | 10,35 | mindestens acht Stellen, rechtsbündig, mit zwei Nachkommastellen, gerundet |
-8.2f | 10,3456 | 10,35 | mindestens acht Stellen, linksbündig, mit zwei Nachkommastellen, gerundet |
10.2F | 1234,5678 | 1.234,57 | mindestens zehn Stellen, rechtsbündig, mit zwei Nachkommastellen, Gruppierung der Vorkommastellen, gerundet |
10.2F | 12345678,908 | 12.345.678,91 | mindestens zehn Stellen, rechtsbündig, mit zwei Nachkommastellen, Gruppierung der Vorkommastellen, gerundet |
b | 1234 | \x04\xD2 | Ganze Zahl als zwei Byte |
4b | 1234 | \x00\x00\x04\xD2 | Ganze Zahl als vier Byte |
B | '1234' | \x12\x34 | Zeichenkette als zwei Byte |
B | 'abCD' | \xAB\xCD | Zeichenkette als zwei Byte |
s | 'Hallo' | Hallo | minimale Länge |
10s | 'Hallo' | Hallo | mindestens zehn Stellen, rechtsbündig |
-10s | 'Hallo' | Hallo | mindestens zehn Stellen, linksbündig |
5s | 'Hallo Welt' | Hallo Welt | mindestens fünf Stellen |
10.3s | 'Hallo' | Hal | drei Stellen in zehnstelligem Feld, rechtsbündig |
-10.3s | 'Hallo' | Hal | drei Stellen in zehnstelligem Feld, linksbündig |
.3s | 'Hallo' | Hal | maximal drei Stellen |