SYNOPSIS | |
string sprintf(string fmt, ...) | |
BESCHREIBUNG | |
Mit dieser Funktion kann man auf einfache Weise aus dem Inhalt | |
von Variablen einen String bauen; und dies effektiver als | |
mit der ueblichen "Du hast "+anzahl+" Punkt(e)"-Methode. | |
Die Funktion bekommt als erstes Argument einen Formatstring fmt, | |
der Informationen darueber enthaelt, wie die weiteren beliebigen | |
Argumente in den Ergebnisstring eingebaut werden sollen. | |
Die meisten Zeichen gelangen vom Formatstring unveraendert in | |
den Ausgabestring. Die Regeln zum Einbau eines Arguments werden | |
immer mit '%' eingeleitet. Moechte man ein '%' in die Ausgabe | |
bringen, so muss man im Formatstring "%%" verwenden. | |
Ein einfaches Beispiel ist erg=sprintf("%s %d", str, i); | |
'%' leitet einen Argumentformatstring (AFS) ein. Das 's' schliesst | |
ihn ab und besagt, dass ein String eingebaut werden soll. Das | |
folgende Leerzeichen wird unveraendert uebernommen. '%' leitet | |
wieder einen neuen Formatstring ein, wobei 'd' eine Ganzzahl | |
bezeichnet (eine Variable von Typ int). | |
Dies ist ein allerdings nur ein sehr einfaches Beispiel. | |
Jeder Argumentformatstring kennzeichnet also, auf welche Art | |
ein Argument in das Ergebnis eingebaut werden soll. Der erste | |
AFS ist fuer das zweite Argument der Funktion, der zweite AFS | |
fuer das dritte Argument u.s.w. (das erste Argument der Funktion | |
ist ja der Formatstring selbst). | |
Jeder AFS beginnt mit einem '%' und endet mit einem der | |
folgenden Zeichen (Argumenttyp-Kennzeichner): | |
Zeichen Argumenttyp Bemerkung | |
's' string | |
'c' integer als ASCII-Zeichen | |
'd' 'i' integer Dezimalschreibweise | |
'o' integer Oktalschreibweise | |
'b' 'B' integer Binaerschreibweise | |
'x' 'X' integer Hexadezimalschreibweise | |
'e' 'E' float Exponentialschreibweise | |
'f' 'F' float Gleitkommadarstellung | |
'g' 'G' float Gleitkommadarstellung | |
'O' mixed Gibt fuer Debugging alles irgendwie | |
lesbar aus, auch Arrays und Mappings | |
'Q' mixed Wie 'O', gibt jedoch Sonderzeichen in | |
Strings in der LPC-Notation aus | |
Zwischen dem '%' und dem Argumenttyp-Kennzeichner kann man | |
noch mehrere Modifikatoren setzen, die das Verhalten | |
beeinflussen. | |
Hier eine Uebersicht. n steht hier fuer eine Ganzzahl, also | |
zum Beispiel "12". | |
Modifikator Bedeutung | |
n Minimale Stringlaenge, die fuer dieses Argument | |
verwendet werden soll. Fehlende Zeichen werden mit | |
einem Fuellzeichen aufgefuellt. Beginnt n mit einer | |
'0' (etwa "08") so ist das Fuellzeichen '0' sonst | |
ist es per Default ' '. (sogenannte 'Feldbreite') | |
.n Bei Ganzzahlen die Maxanzahl der Stellen, bei Gleit- | |
kommazahlen die Maximalzahl der Nachkommastellen. | |
Bei (einfachen) Strings die Maximallaenge. | |
:n Ist dasselbe wie n.n - setzt also beide Werte auf | |
dieselbe Zahl. | |
'X' Als Fuellzeichen wird X genutzt. X koennen dabei | |
auch mehrere Zeichen sein, etwa fuehrt '-=' zu | |
Fuellungen der Art "-=-=-=-=". Um mit Hochkommas | |
zu fuellen ist '\\'' anzugeben. Rueckwaerts- | |
schraegstrich entsprechend mit '\\\\'. | |
<Space> Vor positive Zahlen wird ein Leerzeichen gefuegt. | |
+ Vor positive Zahlen wird ein '+' gefuegt. | |
- Der Wert wird linksbuendig in das fuer dieses Argument | |
vorgesehene Feld eingefuegt (Standard ist rechts- | |
buendig). Bei Strings wird meistens diese Ausrichtung | |
die sinnvollste sein. | |
| Der Wert wird zentriert in das Feld eingefuegt. | |
(Siehe Modifikator n, Feldbreite) | |
$ Blocksatz. Benoetigt eine Feldbreite, funktioniert nur | |
bei Strings (auch im Spaltenmodus). | |
= Spaltenmodus (siehe unten). | |
# Fuer Strings: Tabellenmodus (siehe unten). | |
Fuer '%O'/'%Q': kompakte Ausgabe. | |
@ Arraymodus (siehe unten). | |
* Ein Stern kann immer dort eingesetzt werden, wo | |
hier weiter oben ein n fuer eine Ganzzahl steht. | |
Der Wert der Zahl muss dann als weiterer Parameter | |
an die Funktion uebergeben werden. | |
BEISPIELE | |
Mit den bis jetzt erwaehnten Moeglichkeiten kann man zB machen: | |
sprintf("%d (dec) == %o (octal) == %x (hex)", 20, 20, 20); | |
=> "20 (dec) == 24 (octal) == 14 (hex)" | |
sprintf("Du drehst den Knopf um %.3f Umdrehungen", 12.3456); | |
=> "Du drehst den Knopf um 12.345 Umdrehungen" | |
sprintf("Du liest %|'*':9s", "Fiona"); | |
=> "Du liest **Fiona**" | |
sprintf("Auf dem Zettelstueck steht: %-.*s...", 7, "Hallo Du da"); | |
=> "Auf dem Zettelstueck steht: Hallo D... | |
ERWEITERTE MODI | |
Mit dem Modifikatoren = # und @ stehen maechtige Werkzeuge zur | |
Verfuegung. Mit ein wenig Ueberlegung kann man sich oft viele | |
Zeilen Code ersparen. | |
Arraymodus (@): | |
sprintf("%@s", arr_of_string); | |
Der Argumentformatstring (allerdings ohne das @) wird sooft | |
hintereinandergereiht, wieviele Elemente das Array hat. | |
Jeder AFS wird dann fuer ein Element des Arrays benutzt. | |
sprintf("%@s", ({"aaa","bbb"})) ist somit dasselbe wie | |
sprintf("%s%s", "aaa", "bbb"). Allerdings passt es sich | |
immer an die Elementzahl der uebergebenden Arrays an. | |
Dies ist nuetzlich um Ergebnisse von map() oder aehnlich | |
auszugeben. | |
sprintf("%@s", map_objects(all_inventory(), "short")); | |
Der Argumenttyp-Kennzeichner muss hierbei immer dem Typen | |
eines Elementes des Arrays entsprechen. | |
Spaltenmodus (=): | |
Diese Funktion bricht Text um. Die Feldbreite muss angegeben | |
werden. Wird neben der Feldbreite auch eine maximale String- | |
laenge angegeben, so wird die letztere fuer die Breite des | |
Umbrechens verwendet, die Feldbreite wird mit Fuellzeichen | |
aufgefuellt. | |
sprintf("%=-20s", str); bricht den String str 'wordwrap'end | |
auf 20 Zeichen Laenge um. sprintf("%=-*s", len, str); | |
ist schon eine einfache break_string() Variante. | |
Tabellenmodus (#): | |
Diese Funktion gibt Strings tabellenartig aus. Die Teilstrings | |
muessen mit \n getrennt als ein String als Argument uebergeben | |
werden. Die Feldbreite muss angegeben werden und bezeichnet | |
die (maximale) Gesamtbreite der Tabelle. | |
Die Anzahl der Spalten der Tabelle wird moeglichst optimal | |
bestimmt, und ist fuer alle Spalten gleich. Wird ein | |
Wert als 'Praezision' angegeben, so ist dies die Anzahl von | |
Spalten, die verwendet werden soll. | |
sprintf("%#30.4s", str) erzeugt eine Tabelle, die maximal | |
30 Zeichen breit ist und 4 Spalten enthaelt. | |
sprintf("%#30s", str) legt die Spaltenzahl dynamisch anhand | |
der Einzelstringlaengen fest, so dass der laengste String | |
noch genau in die Tabelle passt. | |
Wenn string* worte die in die Tabelle einzubettenden Worte | |
enthaelt, so muss str=implode(worte,"\n") sein. | |
SIEHE AUCH: | |
printf(E) |