| 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) |