Formatierung in Schablonen

Anforderung

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.

Realisierung

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.

Indikatoren

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.


Weite

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.

Genauigkeit

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.

Typ

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.


Beispiele

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



Hinweise