Variablenmanipulation

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.

Substring

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.

Syntax
${VARIABLENNAME[:Anfang[:Laenge]]}
Beispiele

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. ;-)