Lpc Manpages

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)