FUNKTION:
 int sscanf(string str,string fmt,mixed var1,mixed var2,...)

ARGUMENTE:
      str
        - String, der nach einem Muster zu durchsuchen ist
        - darf nicht NULL sein
      fmt
        - Format-String, nach dessen Muster untersucht wird
      var1,var2,...
        - Argumente die mit %d oder %s korrespondieren

RUeCKGABEWERT:
     Anzahl der gefundenen Argumente.

BESCHREIBUNG:
     Wertet einen String <str> unter Beruecksichtigung des Formats <fmt>
     aus. <fmt> kann Strings beinhalten, die durch %d und %s getrennt
     werden. Jedes %d und %s entspricht einer der Variablen <var1>, <var2>,
     etc. in die gespeichert werden soll.

     Die Operatoren im Format-String <fmt> haben eines der folgenden
     Formate:

         %[+][!|~][<size>[.<minmatch>]]<type>

        <type> kann folgendes sein:
            d: steht fuer eine Zahl
            D: steht fuer eine Zahl
            U:
            s: steht fuer eine Zeichenkette
            %: steht fuer das %-Zeichen
            t: steht fuer Whitespaces (also Leerschlaege und Tabulatoren),
               speichert diese aber nicht.

     <size> ist die erwartete Feldgroesse, <minmatch> die verlangte
     minimale Laenge fuer einen Treffer (Standardwerte sind 0 fuer
     Strings und 1 fuer Nummern). Sowohl <size> als auch <minmatch> kann
     entweder numerisch oder mit '*' angegeben werden - im zweiten Fall
     wird die gueltige Variable in der Liste der Argumente benutzt.

     Wird + angegeben, muessen die Zeichen nach dem Feld ebenfalls
     matchen. Ist dies nicht der Fall, wird auch dieses Feld als
     Misserfolg in der Rueckgabe betrachtet (auch wenn der Wert
     bereits an die zugehoerige Variable zugewiesen wurde).

     Wird ! angegeben, wird zwar die Suche durchgefuehrt, aber Treffer
     werden weder gespeichert noch gezaehlt. Mit ~ als Argument wird
     zwar die Suche durchgefuehrt und die Treffer gezaehlt, das Resultat
     wird aber nicht gespeichert.

     Wenn ein %s nicht am Ende von <fmt> steht, wird nur ein Treffer
     registriert, wenn auch der nachfolgende String bzw. das
     nachfolgende Format gefunden wird. Weiter unten gibt es dazu
     ein Beispiel.
     Bei einem %d allerdings muss dieses Verhalten mit einem '+'
     erzwungen werden.

     Der Unterschied zwischen %d und %D %U ist, dass letzteres ein
     unmittelbar vorausgehendes %s so bald als moeglich abbricht,
     waehrend ersteres zuerst versucht, einen moeglichst grossen Treffer
     fuer %s zu erzielen. Trotzdem ueberspringt %D/%U keine Whitespaces,
     dazu muss %.0t%D gesetzt werden.

     Die Funktion sscanf() ist insofern ein Spezialfall, als dass
     Argumente automatisch nach Referenz uebergeben werden.

BEISPIELE:
     string who, what;
         if (sscanf("wirf frisbee zu rex",
                    "wirf %s zu %s", what, who) != 2)
             write("Usage: Wirf <what> zu <who>\n");
         else
             write("Du wirfst einen "+what+" zu "+who+".\n");

     sscanf("ab", "%s%s", who, what)
     ==> liefert 2, who = "", what = "ab"

     sscanf("ab", "%s %s", who, what)
     ==> liefert 0, who = 0, what = 0

     sscanf("ab ", "%s %s", who, what)
     ==> liefert 2, who = "ab", what = ""


     // Achtung bei %d
     sscanf("12 ","%d xyz", num1);
     ==> liefert 1, num1 = 12

     sscanf("12 ","%s xyz", num1);
     ==> liefert 0, num1 = 0

     // mit '+' wird das Parsen des Restformats erzwungen:
     sscanf("12 ","%+d xyz", num1);
     ==> liefert 0, num1 = 12


     // Weiteres Beispiel zu %d:
     sscanf("get 12 coins","get %d rubys",num)
     ==> ergibt 1, weil 'rubys' ignoriert wird

     // Beispiel Format-Ignore 2
     sscanf("get 12 coins","get %+d rubys",num);
     ==> ergibt 0, da mit dem '+' das Parsen des Restformats erzwungen wird
     ==> ergibt 1 bei 'get 12 rubys'

     // Beispiel Format-Ignore 3 [alte Variante]
     sscanf("get 12 coins","get %d rubys%s", num, dummy)
     ==> ergibt 1
     ==> ergibt 2 bei "get 12 rubys"

SIEHE AUCH:
        explode(E), regexp(E)

8.Aug 2007 Gloinson
