OBS/Makros und Scripting/Allgemeines/Syntax

Aus OBS Wiki
Version vom 4. Mai 2020, 09:52 Uhr von Rademacker (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen


Die Makros im OBS orientieren sich an der Syntax der Sprache Pascal.

Variablen-Typen

string

Variablen des Typs string enthalten Zeichenketten (Text) wie z. B. 'Max Mustermann' oder 'Musterweg 1a'.

char

Varablen des Typs char enthalten ein einzelnes Zeichen (Text) wie z.B. 'A', 'z' oder '1'.

ACHTUNG: Soll ein char als leer übergeben werden muss stattdessen #0 benutzt werden:
Methode('1');
Methode(#0);

integer

Variablen des Typs integer enthalten Ganzzahlen wie 2, 15 oder 1538.

double

Variablen des Typs double enthalten Dezimalzahlen. Hier ist zu beachten, dass das Trennzeichen bei der Angabe von Dezimalstellen immer ein Punkt ist.
Beispiel:

    Preis := 10.95;

boolean

Variablen dieses Typs enthalten Wahrheitswerte. Sie können entweder wahr oder falsch sein. Der Wert lässt sich direkt mit true oder false setzen. Es können aber Bedingungen für die Zuweisung verwendet werden. Boolsche Variablen lassen sich in bedingten Anweisungen des Typs if auch ohne Vergleichswert nutzen.
Beispiel:

Vorbelegung:

    lVerglichen = false;
    lA_ist_kleiner_B = false;


Abfrage:

    if (not lVerglichen) then begin
        lA_ist_kleiner_B := A < B;
        lVerglichen := true;
    end;
ACHTUNG: Boolshe Variablen, welche von OBS an den Scripter über die Parameter als variante übergeben werden, werden als Zahlen interpretiert!

Dies führt dazu, dass diese boolsche Variablen nicht mit einem "not" negiert werden können.

    if (not lVariable) then begin //Falsch

    if (lVariable = False) then begin //Richtig

Konstanten

Konstanten enthalten wie Variablen bestimmte Werte. Anders als bei Variablen werden Konstanten nicht einfach mit einem Datentyp sondern schon mit dem Wert definiert, der im ganzen Programm(-teil) verfügbar sein soll. Kostanten können nicht verändert werden.

In Makros lassen sich eigene Konstanten definieren. Das kann wie folgt aussehen:

    const
        GRUSS = 'Mit freundlichen Grüßen';
        HOMEPAGE_HINWEIS = 'Besuchen Sie uns doch mal auf unserer Homepage unter www.unsere-seite.de und erfahren '+
                           'Sie mehr über die ergonomische Einrichtung von Arbeitsplätzen. Für aktuelle Informationen '+
                           'oder Aktionen könne Sie sich auf unserer Homepage für den Newsletter eintragen.';

Eine Übersicht der Konstanten die vom OBS für Makros mitgeliefert werden finden Sie hier.

Methoden

Es gibt zwei Typen: Prozedur und Funktion. Der Unterschied dabei ist, dass Funktionen einen Rückgabewert haben. Die Definition einer Methode erfolgt in der Reihenfolge Typ-Anweisung, Methodenname, Parameter und bei Funktionen der Typ des Rückgabewerts. Mehrere Parameter sind mit Semikolon zu trennen.

Beispiel Prozedur:

procedure Name(cParameter1: string; nParameter2: integer);

Beispiel Funktion:

function Name(cParameter1: string; nParameter2: integer): boolean;

Bedingte Anweisungen

Bedingte Anweisungen machen es möglich einen Teil des Makros nur ausführen zu lassen, wenn etwas bestimmtes zutrifft. In Pascal gibt es dafür if und case. Die case-Anweisung unterliegt dabei allerdings im Vergleich zur if-Anweisung einiger Einschränkungen.

if

    if (Bedingung) then begin
        Befehl1;
        Befehl2;
        //...
    end;

Es ist auch möglich mehrere Bedingungen zu definieren. Dabei lässt sich bestimmen, ob nur eine, alle oder ein Teil der Bedingung zutreffen muss, um den Teil des Makros auszuführen. Das kann hilfreich sein, wenn in mehreren Fällen das gleiche passieren soll.
Alle Bedingungen sollen zutreffen:

    if (Bedingung1 and Bedingung2) then begin
        //code
    end;

Nur eine Bedingung muss zutreffen:

    if (Bedingung1 or Bedingung2) then begin
        //code
    end;

Nur Bedingung 1 oder Bedingung 2 und 3 (hier sind die Klammern wichtig!):

    if (Bedingung1 or (Bedingung2 and Bedingung 3)) then begin
        //code
    end;

case

Die case-Anweisung prüft den Wert einer Variablen ab und und führt dann den - sofern vorhanden - dazu passenden Fall aus. Dies funktioniert jedoch nur mit einem ordinalen Typ (z. B. Ganzzahl oder einzelnes Zeichen).
Struktur:

    case Wert of
        Fall1 : Anweisung;
        Fall2 : Anweisung;
        Fall3 : begin
            Anweisung 1;
            Anweisung 2;
        end;
    else
        Standard-Anweisung
    end;

Es können als Bedingung (Fall) auch mehrere Angaben mit Komma getrennt erfolgen oder Bereiche mit zwei Punkten angegeben werden.
Beispiel:

    case nMonat of
        1,3,5,7..8,10,12 : nTage := 31;
        2 : begin
            if IstSchaltjahr then begin
                nTage := 29;
            end else begin
                nTage := 28;
            end;
        end;
    else
        nTage := 30;
    end;

Schleifen

Schleifen ermöglichen die mehrfache Ausführung eines Teils des Makros. Es wird unterschieden in kopfgesteuerten und fußgesteuerten Schleifen. In den Makros können Sie zwei kopfgesteuerte (while und for) und eine fußgesteuerte Schleife (repeat until) verwenden. Der Unterschied besteht darin, dass bei kopfgesteuerten Schleifen der eingefasste Teil nur ausgeführt wird, wenn die Bedingung der Schleife dies zulässt. Bei der fußgesteuerten Schleife wird der eingefasste Teil mindestens einmal ausgeführt. Die weitere Ausführung entscheidet dann die Bedingung am "Fuß" der Schleife.

while

Bei dieser kopfgesteuerten Schleife wird der eingefasste Code solange ausgeführt, bis die Bedingung nicht mehr erfüllt ist. Die Anzahl der Durchläufe kann abhängig von der Bedingung variieren. Es ist möglich Variablen der Bedingung innerhalb der Schleife zu verändern. Es ist möglich eine unendliche Ausführung dieser Schleife zu erzeugen.

for

Schleifen vom Typ for arbeiten mit einem festen Zähler. Es kann dabei hoch sowie runter gezählt werden. Sobald der Startwert und der Endwert bestimmt sind, wird die Schleife entsprechend oft ausgefüht. Auf den Zähler kann dabei innerhalb der Schleife kein Einfluss genommen werden.

repeat until

Die eingefasste Code dieser fußgesteuerten Schleife wird wiederholt, bis die Abbruch-Bedingung erfüllt wird.