Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 1 | SYNOPSIS |
| 2 | int sscanf(string str, string fmt, mixed var1, mixed var2, ...) |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 3 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 4 | BESCHREIBUNG |
| 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 9 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 10 | Die Operatoren im Format-String <fmt> haben eines der folgenden |
| 11 | Formate: |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 12 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 13 | %[+][!|~][<size>[.<minmatch>]]<type> |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 14 | |
| 15 | <type> kann folgendes sein: |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 16 | d: meldet eine Zahl |
| 17 | D: meldet eine Zahl |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 18 | U: |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 19 | s: meldet eine Zeichenkette |
| 20 | %: meldet das %-Zeichen |
| 21 | t: meldet Whitespaces (also Leerschlaege und Tabulatoren), |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 22 | speichert diese aber nicht. |
| 23 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 24 | <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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 29 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 30 | 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 34 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 35 | 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 39 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 40 | 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 44 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 45 | 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 50 | |
Zesstra | 5481d49 | 2021-04-08 20:07:06 +0200 | [diff] [blame] | 51 | Wenn eine Zahl erkannt wird, welche ausserhalb des Zahlenbereiches |
| 52 | von Integers ist, so wird dies nicht als Treffer betrachtet. |
| 53 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 54 | Zurueck gegeben wird die Anzahl Treffer. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 55 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 56 | Die Funktion sscanf() ist insofern ein Spezialfall, als dass |
| 57 | Argumente automatisch nach Referenz uebergeben werden. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 58 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 59 | BEISPIELE |
| 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 67 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 68 | sscanf("ab", "%s%s", who, what) |
| 69 | ==> liefert 2, who = "", what = "ab" |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 70 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 71 | sscanf("ab", "%s %s", who, what) |
| 72 | ==> liefert 0, who = 0, what = 0 |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 73 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 74 | sscanf("ab ", "%s %s", who, what) |
| 75 | ==> liefert 2, who = "ab", what = "" |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 76 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 77 | GESCHICHTE |
| 78 | LDMud 3.3.713/3.2.13 fuehrte den '+'-Modifizierer ein. |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 79 | |
Zesstra | d59c389 | 2019-11-28 20:53:39 +0100 | [diff] [blame] | 80 | SIEHE AUCH |
MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 81 | explode(E), regexp(E) |