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)
