Zeichenketten, Delimiter, Dateien und Environment Variable mit dem MPR

Moderator: MVogt

Antworten
Benutzeravatar
Theo_Gottwald
Beiträge: 309
Registriert: 03. Okt 2009, 08:57
Wohnort: Herrenstr.11 * 76706 Dettenheim
Kontaktdaten:

Zeichenketten, Delimiter, Dateien und Environment Variable mit dem MPR

Beitrag von Theo_Gottwald » 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)

Code: Alles auswählen

EVG\Daten
VAR\$$TXT=$v1$
Oder wir lesen die Zeichen aus einer beliebigen Datei. Hier eine Textdatei.

Code: Alles auswählen

' 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
Wir könnten auch eine Zeile aus einer INI-Datei lesen, wie folgt:

Code: Alles auswählen

VAR\$$FIL=X:\mypath\Datenfile.ini
VAR\$$SEC=PC-Namen
VAR\$$CLI=Client_100
CFI\$$FIL|$$SEC|$$CLI>$$TXT
Wir könenn das noch verfeinern, und den CLient-Name dynamisch ermitteln:

Code: Alles auswählen

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: Alles auswählen

' 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$
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.

Code: Alles auswählen

SBD\|
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:

Code: Alles auswählen

VAR\$$TXT=C12345|CA9000|DX7689
SBD\;$$TXT;|;1
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:

Code: Alles auswählen

SBD\|$$TXT
Und nun benötigen wir noch den "Delimiter", also das Trennzeichen in der Zeichenkette die zerlegt werden soll. Das ist bei uns das ",".

Code: Alles auswählen

SBD\|$$TXT|,
und als letztes fehlt nur noch die Nummer des ersten Terms den wir zurück haben möchten, in dem Fall Term Nummer 1:

Code: Alles auswählen

SBD\|$$TXT|,|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.

Antworten

Zurück zu „Package Robot“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast