Variablen an sich eröffnen ihren Nutzen erst dann, wenn man sie zur Laufzeit verändern kann. Mit Hilfe dieser Variabilität lassen sich komplexe Verhaltensweisen steuern und vorsehen.
In der Regel bezeichnen Strings eine Aneinanderreihung einzelner
Zeichen (character). Die Größe eines Strings bestimmt sich durch die
Anzahl der identifizierbaren einzelnen Zeichen. Zum Beispiel besteht
der String „Apfelbaum“ aus 9 Zeichen. Ein String kann
grundsätzlich in so genannte Teilstrings zerlegt werden, also Strings,
die, wenn man sie wieder aneinanderreiht, den ursprünglichen String
ergeben. Im genannten Beispiel könnten wir den String
„Apfelbaum“ in die Teilstrings „Apfel“ und
„baum“ zerlegen, aber auch „Apf“ und
„elbaum“ sind echte Teilstrings. Ein String hat
theoretisch keine begrenzte Größe, er kann beliebig viele Zeichen
enthalten, der gesamte Text dieses Buches könnte so als ein String
aufgefasst werden. Natürlich wäre das dann nicht mehr sehr handlich,
dennoch ist der Vorgang des Zerlegens eines Strings in Teilstrings
eine Standardprozedur beim Programmieren von Anwendungen. In vielen
Programmiersprachen heißt die hier beschriebene Funktionalität
Substring. Mit einer Substring-Funktion kann man
Teile eines Strings ausschneiden und das Ergebnis in einer anderen
Variablen abspeichern. In Asterisk gibt es keine eigenständige Routine
für diese Substring-Funktion, sondern hierfür wird ein :
(Doppelpunkt) nach dem Variablennamen eingesetzt. Vom Inhalt der
Variablen, also dem String, wird dann eine vorgegebene Anzahl von
Zeichen (Länge) als Teilstring abgetrennt.
Bei einer Telefonanlage wird traditionell eine führende 0
(Null) gewählt, um eine Amtsleitung zu bekommen. Die zu wählende
Telefonnummer darf diese 0 aber nicht enthalten. Wird die Nummer
0030 227 32320
gewählt, so kann man mit folgender Zeile
die eigentliche Rufnummer in die Variable
${RUFNUMMER}
abspeichern.[46]
exten => _0X.,1,Set(RUFNUMMER=${EXTEN:1})
Wenn die Angabe der Länge fehlt, wird automatisch der Rest des Strings genommen.
Wenn wir die letzten 5 Ziffern der gewählten Nummer benötigen,
dann erreichen wir das mit einer negativen Zahl. Bei der oben
gewählten Nummer würde die folgende Zeile den Wert 32320 in der
Variablen ${DURCHWAHL}
abspeichern.
exten => _0X.,1,Set(DURCHWAHL=${EXTEN:-5})
Möchten wir die Vorwahl in einer separaten Variable abspeichern, so erreichen wir dies durch:
exten => _0X.,1,Set(VORWAHL=${EXTEN:1:3})
Diese
Zeile geht davon aus, dass die Vorwahl 3-stellig ist und speichert
sie in der Variable ${VORWAHL}
.[47]
Nehmen wir an, wir möchten bei Telefonaten zur Nummer
00012024562121
nach Amerika die einzelnen Bestandteile
herausfiltern:[48]
exten => _0001X.,1,Set(INTERNATIONALEVORWAHL=${EXTEN:3:1}) exten => _0001X.,n,Set(ORTSVORWAHL=${EXTEN:4:3}) exten => _0001X.,n,Set(RUFNUMMER=${EXTEN:7}) exten => _0001X.,n,Set(DURCHWAHL=${EXTEN:-4}
[46] Für alle neugierigen Leser: Das ist die Telefonnummer des Parlamentsarchives des Deutschen Bundestages in Berlin.
[47] Leider macht diese Variante in Deutschland wenig Sinn, da es unterschiedlich lange Vorwahlen gibt. Mehr Informationen zur deutschen Vorwahl finden Sie unter http://de.wikipedia.org/wiki/Telefonvorwahl_%28Deutschland%29.
[48] Um Ihnen das Gespräch nach Amerika zu sparen: Dies ist die Nummer der Besucherzentrale des Weißen Hauses in Washington DC. ;-)