blob: 4344d0e2c92221fd0543eef30ea38753f682acb4 [file] [log] [blame]
Zesstrad59c3892019-11-28 20:53:39 +01001SYNOPSIS
2 int sscanf(string str, string fmt, mixed var1, mixed var2, ...)
MG Mud User88f12472016-06-24 23:31:02 +02003
Zesstrad59c3892019-11-28 20:53:39 +01004BESCHREIBUNG
5 Wertet einen String <str> unter Beruecksichtigung des Formats
6 <fmt>. <fmt> kann Strings beinhalten, die durch %d und %s getrennt
7 werden. Jedes %d und %s entspricht einer der Variablen <var1>,
8 <var2> etc.
MG Mud User88f12472016-06-24 23:31:02 +02009
Zesstrad59c3892019-11-28 20:53:39 +010010 Die Operatoren im Format-String <fmt> haben eines der folgenden
11 Formate:
MG Mud User88f12472016-06-24 23:31:02 +020012
Zesstrad59c3892019-11-28 20:53:39 +010013 %[+][!|~][<size>[.<minmatch>]]<type>
MG Mud User88f12472016-06-24 23:31:02 +020014
15 <type> kann folgendes sein:
Zesstrad59c3892019-11-28 20:53:39 +010016 d: meldet eine Zahl
17 D: meldet eine Zahl
MG Mud User88f12472016-06-24 23:31:02 +020018 U:
Zesstrad59c3892019-11-28 20:53:39 +010019 s: meldet eine Zeichenkette
20 %: meldet das %-Zeichen
21 t: meldet Whitespaces (also Leerschlaege und Tabulatoren),
MG Mud User88f12472016-06-24 23:31:02 +020022 speichert diese aber nicht.
23
Zesstrad59c3892019-11-28 20:53:39 +010024 <size> ist die erwartete Feldgroesse, <minmatch> die verlangte
25 minimale Laenge fuer einen Treffer (Standardwerte sind 0 fuer
26 Strings und 1 fuer Nummern). Sowohl <size> als auch <minmatch> kann
27 entweder numerisch oder mit '*' angegeben werden - im zweiten Fall
28 wird die gueltige Variable in der Liste der Argumente benutzt.
MG Mud User88f12472016-06-24 23:31:02 +020029
Zesstrad59c3892019-11-28 20:53:39 +010030 Wird + angegeben, muessen die Zeichen nach dem Feld ebenfalls
31 matchen. Ist dies nicht der Fall, wird das Feld als Misserfolg
32 betrachted (auch wenn der Wert bereits an die zugehoerige Variable
33 zugewiesen wurde).
MG Mud User88f12472016-06-24 23:31:02 +020034
Zesstrad59c3892019-11-28 20:53:39 +010035 Wird ! angegeben, wird zwar die Suche durchgefuehrt, aber Treffer
36 werden weder gespeichert noch gezaehlt. Mit ~ als Argument wird
37 zwar die Suche durchgefuehrt und die Treffer gezaehlt, das Resultat
38 wird aber nicht gespeichert.
MG Mud User88f12472016-06-24 23:31:02 +020039
Zesstrad59c3892019-11-28 20:53:39 +010040 Wenn %s nicht am Ende von <fmt> steht, wird nur ein Treffer
41 registriert, wenn auch der nachfolgende String bzw. das
42 nachfolgende Format gefunden wird. Weiter unten gibt es dazu
43 ein Beispiel.
MG Mud User88f12472016-06-24 23:31:02 +020044
Zesstrad59c3892019-11-28 20:53:39 +010045 Der Unterschied zwischen %d und %D %U ist, dass letzteres ein
46 unmittelbar vorausgehendes %s so bald als moeglich abbricht,
47 waehrend ersteres zuerst versucht, einen moeglichst grossen Treffer
48 fuer %s zu erzielen. Trotzdem ueberspringt %D/%U keine Whitespaces,
49 dazu muss %.0t%D gesetzt werden.
MG Mud User88f12472016-06-24 23:31:02 +020050
Zesstra5481d492021-04-08 20:07:06 +020051 Wenn eine Zahl erkannt wird, welche ausserhalb des Zahlenbereiches
52 von Integers ist, so wird dies nicht als Treffer betrachtet.
53
Zesstrad59c3892019-11-28 20:53:39 +010054 Zurueck gegeben wird die Anzahl Treffer.
MG Mud User88f12472016-06-24 23:31:02 +020055
Zesstrad59c3892019-11-28 20:53:39 +010056 Die Funktion sscanf() ist insofern ein Spezialfall, als dass
57 Argumente automatisch nach Referenz uebergeben werden.
MG Mud User88f12472016-06-24 23:31:02 +020058
Zesstrad59c3892019-11-28 20:53:39 +010059BEISPIELE
60 string who, what;
61 if (sscanf("wirf frisbee zu rex",
62 "wirf %s zu %s", what, who) != 2)
63 write("Usage: Wirf <what> zu <who>\n");
64 else
65 write("Du wirfst einen "+what+" zu "+who+" um auf dich "
66 "aufmerksam zu machen.\n");
MG Mud User88f12472016-06-24 23:31:02 +020067
Zesstrad59c3892019-11-28 20:53:39 +010068 sscanf("ab", "%s%s", who, what)
69 ==> liefert 2, who = "", what = "ab"
MG Mud User88f12472016-06-24 23:31:02 +020070
Zesstrad59c3892019-11-28 20:53:39 +010071 sscanf("ab", "%s %s", who, what)
72 ==> liefert 0, who = 0, what = 0
MG Mud User88f12472016-06-24 23:31:02 +020073
Zesstrad59c3892019-11-28 20:53:39 +010074 sscanf("ab ", "%s %s", who, what)
75 ==> liefert 2, who = "ab", what = ""
MG Mud User88f12472016-06-24 23:31:02 +020076
Zesstrad59c3892019-11-28 20:53:39 +010077GESCHICHTE
78 LDMud 3.3.713/3.2.13 fuehrte den '+'-Modifizierer ein.
MG Mud User88f12472016-06-24 23:31:02 +020079
Zesstrad59c3892019-11-28 20:53:39 +010080SIEHE AUCH
MG Mud User88f12472016-06-24 23:31:02 +020081 explode(E), regexp(E)