Zeichenketten, Delimiter, Dateien und Environment Variable mit dem MPR
Posted: 19. Nov 2018, 11:26
Zeichenketten können zum Beispiel INI- oder Textdateien sein, irgendetwas aus Zeichen und Buchstaben.
Hier im Beispiel könnten wir dazu eine Umgebungsvariable auslesen (Environment-Variable).
Dazu gibt es den Befehl EVG\ (Environment Variable Get)
Oder wir lesen die Zeichen aus einer beliebigen Datei. Hier eine Textdatei.
Wir könnten auch eine Zeile aus einer INI-Datei lesen, wie folgt:
Wir könenn das noch verfeinern, und den CLient-Name dynamisch ermitteln:
So nun haben wir unsre Information. In $$TXT steht also nun zum Beispiel:
C12345,CA9000,DX7689
Wir benötigen nun nacheinander alle drei dieser Werte in den MPR-Variablen: $$W01, $$W02 und $$W03.
Also konkret:
$$W01 soll den Wert: C12345 bekommen,
$$W02 soll den Wert: CA9000 bekommen und
$$W03 soll den Wert: DX7689 bekommen.
Wir haben nun diese drei Werte in der Variablen $$TXT. Wie trennen wir nun diese Variable auf?
Dafür hat der MPR (unter anderem) den Befehl SBD\.
SBD\ bedeutet "String between Delimiter" also übersetzt "Zeichenkette zwischen Trennzeichen". Ob man sich das merken will oder nicht, die Anwendung ist ganz einfach, sieht aber zunächst kompliziert aus.
In unserem Fall wäre das Skript so:
und damit hätten wir das schon erledigt.
Das funktioniert so direkt bis $v6$, will man mehr Komponenten zerlegen, muß man statt der 1 einen anderen Startpunkt angeben.
Was bedeuten nun die einzelnen Parameter in SBD\ ?
Hier mal Schritt für Schritt.
Das erste Zeichen nach dem SBD\ ist hier ein "|" und es ist das Trennzeichen für die Parameter in dem Befehl SBD\ selbst.
Achtung Knobelei:
Hätten wir hier einen ";" angegeben, zum Beispiel weil in unserer Liste der "|" als Trennzeichen benutz worden wäre, müßte der Befehl so ausgesehen haben:
Verstanden? Falls nicht, macht an der Stelle nichts, merken muß man sich nur, dass man bei SBD\ eben zuerst das Trennzeichen für den Befehl selbst angeben muß. Das ist in der Regel ein "|".
Danach kommt die Variable die zerlegt werden soll, alles immer abgetrennt durch dieses Trennzeichen. Also so:
Und nun benötigen wir noch den "Delimiter", also das Trennzeichen in der Zeichenkette die zerlegt werden soll. Das ist bei uns das ",".
und als letztes fehlt nur noch die Nummer des ersten Terms den wir zurück haben möchten, in dem Fall Term Nummer 1:
Und damit sind wir auch schon am Ziel. War doch gar nicht so schwer, wie es auf den ersten Blick aussieht.
Und vor allem - es ist viel weniger Tipparbeit als wenn man es irgendwie anders gemacht haben würde.
*Als Hinweis: für Fortgeschrittenen User und lange Listen gibt es auch noch den Befehl: FEM\ (For Each Member).
Dabei wird für jedes Element eine delimitierten Liste ein angegebenes Unterskript aufgerufen.
Hier im Beispiel könnten wir dazu eine Umgebungsvariable auslesen (Environment-Variable).
Dazu gibt es den Befehl EVG\ (Environment Variable Get)
Code: Select all
EVG\Daten
VAR\$$TXT=$v1$
Code: Select all
' Zu lesende Datei
VAR\$$FIL=C:\Datenfile.txt
' Zeilennumer der Zeile die gelesen werden soll - also Zeile 3
VAR\$$LIN=3
LFF\$$FIL|$$LIN>$$TXT
Code: Select all
VAR\$$FIL=X:\mypath\Datenfile.ini
VAR\$$SEC=PC-Namen
VAR\$$CLI=Client_100
CFI\$$FIL|$$SEC|$$CLI>$$TXT
Code: Select all
VAR\$$FIL=X:\mypath\Datenfile.ini
VAR\$$SEC=PC-Namen
' Die folgenden 2 Zeilen laden den Computername in die Variable $$CLI
GCN\
VAR\$$CLI
' Hier lesen wir den Eintrag aus der INI-Datei in die Variable $$TXT
CFI\$$FIL|$$SEC|$$CLI>$$TXT
So nun haben wir unsre Information. In $$TXT steht also nun zum Beispiel:
C12345,CA9000,DX7689
Wir benötigen nun nacheinander alle drei dieser Werte in den MPR-Variablen: $$W01, $$W02 und $$W03.
Also konkret:
$$W01 soll den Wert: C12345 bekommen,
$$W02 soll den Wert: CA9000 bekommen und
$$W03 soll den Wert: DX7689 bekommen.
Wir haben nun diese drei Werte in der Variablen $$TXT. Wie trennen wir nun diese Variable auf?
Dafür hat der MPR (unter anderem) den Befehl SBD\.
SBD\ bedeutet "String between Delimiter" also übersetzt "Zeichenkette zwischen Trennzeichen". Ob man sich das merken will oder nicht, die Anwendung ist ganz einfach, sieht aber zunächst kompliziert aus.
In unserem Fall wäre das Skript so:
Code: Select all
' Text hier der Variable zuweisen zum Test
VAR\$$TXT=C12345,CA9000,DX7689
' Variable $$TXT zerlegen
SBD\|$$TXT|,|1
VAR\$$W01=$v1$
VAR\$$W02=$v2$
VAR\$$W03=$v3$
Das funktioniert so direkt bis $v6$, will man mehr Komponenten zerlegen, muß man statt der 1 einen anderen Startpunkt angeben.
Was bedeuten nun die einzelnen Parameter in SBD\ ?
Hier mal Schritt für Schritt.
Code: Select all
SBD\|
Achtung Knobelei:
Hätten wir hier einen ";" angegeben, zum Beispiel weil in unserer Liste der "|" als Trennzeichen benutz worden wäre, müßte der Befehl so ausgesehen haben:
Code: Select all
VAR\$$TXT=C12345|CA9000|DX7689
SBD\;$$TXT;|;1
Danach kommt die Variable die zerlegt werden soll, alles immer abgetrennt durch dieses Trennzeichen. Also so:
Code: Select all
SBD\|$$TXT
Code: Select all
SBD\|$$TXT|,
Code: Select all
SBD\|$$TXT|,|1
Und vor allem - es ist viel weniger Tipparbeit als wenn man es irgendwie anders gemacht haben würde.
*Als Hinweis: für Fortgeschrittenen User und lange Listen gibt es auch noch den Befehl: FEM\ (For Each Member).
Dabei wird für jedes Element eine delimitierten Liste ein angegebenes Unterskript aufgerufen.