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