SYNOPSIS int sscanf(string str, string fmt, mixed var1, mixed var2, ...) BESCHREIBUNG Wertet einen String unter Beruecksichtigung des Formats . kann Strings beinhalten, die durch %d und %s getrennt werden. Jedes %d und %s entspricht einer der Variablen , etc. Die Operatoren im Format-String haben eines der folgenden Formate: %[+][!|~][[.]] kann folgendes sein: d: meldet eine Zahl D: meldet eine Zahl U: s: meldet eine Zeichenkette %: meldet das %-Zeichen t: meldet Whitespaces (also Leerschlaege und Tabulatoren), speichert diese aber nicht. ist die erwartete Feldgroesse, die verlangte minimale Laenge fuer einen Treffer (Standardwerte sind 0 fuer Strings und 1 fuer Nummern). Sowohl als auch 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 das Feld als Misserfolg betrachted (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 %s nicht am Ende von steht, wird nur ein Treffer registriert, wenn auch der nachfolgende String bzw. das nachfolgende Format gefunden wird. Weiter unten gibt es dazu ein Beispiel. 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. Wenn eine Zahl erkannt wird, welche ausserhalb des Zahlenbereiches von Integers ist, so wird dies nicht als Treffer betrachtet. Zurueck gegeben wird die Anzahl Treffer. 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 zu \n"); else write("Du wirfst einen "+what+" zu "+who+" um auf dich " "aufmerksam zu machen.\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 = "" GESCHICHTE LDMud 3.3.713/3.2.13 fuehrte den '+'-Modifizierer ein. SIEHE AUCH explode(E), regexp(E)