OBS/Makros und Scripting/Allgemeines/Syntax: Unterschied zwischen den Versionen

Aus OBS Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
(Achtung zu boolsche Variablen welche von OBS in den Scripter über Parameter als variant übergeben werden eingefügt)
Zeile 1: Zeile 1:
{{Makros und Scripting}}
{{Makros und Scripting}}
Die Makros im OBS orientieren sich an der Syntax der Sprache [https://de.wikipedia.org/wiki/Pascal_%28Programmiersprache%29 Pascal].
Die Makros im OBS orientieren sich an der Syntax der Sprache [https://de.wikipedia.org/wiki/Pascal_%28Programmiersprache%29 Pascal].
=Variablen-Typen=
=Variablen-Typen=
==string==
==string==
Variablen des Typs ''string'' enthalten Zeichenketten (Text) wie z. B. 'Max Mustermann' oder 'Musterweg 1a'.
Variablen des Typs ''string'' enthalten Zeichenketten (Text) wie z. B. 'Max Mustermann' oder 'Musterweg 1a'.
==integer==
==integer==
Variablen des Typs ''integer'' enthalten Ganzzahlen wie 2, 15 oder 1538.
Variablen des Typs ''integer'' enthalten Ganzzahlen wie 2, 15 oder 1538.
==double==
==double==
Variablen des Typs ''double'' enthalten Dezimalzahlen. Hier ist zu beachten, dass das Trennzeichen bei der Angabe von Dezimalstellen immer ein Punkt ist.<br />
Variablen des Typs ''double'' enthalten Dezimalzahlen. Hier ist zu beachten, dass das Trennzeichen bei der Angabe von Dezimalstellen immer ein Punkt ist.<br />
Beispiel:
Beispiel:
Preis := 10.95;
<source lang=delphi>
    Preis := 10.95;
</source>
 
==boolean==
==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 [[OBS/Makros#if|''if'']] auch ohne Vergleichswert nutzen.<br />
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 [[OBS/Makros#if|''if'']] auch ohne Vergleichswert nutzen.<br />
Zeile 15: Zeile 22:
<br />
<br />
Vorbelegung:
Vorbelegung:
<syntaxhighlight lang="Delphi">
<source lang="Delphi">
     Verglichen = false;
     lVerglichen = false;
     A_ist_kleiner_B = false;
     lA_ist_kleiner_B = false;
</syntaxhighlight>
</source><br />
<br />
 
Abfrage:
Abfrage:
<syntaxhighlight lang="Delphi">
<source lang="Delphi">
     if (not Verglichen) then begin
     if (not lVerglichen) then begin
         A_ist_kleiner_B := A < B;
         lA_ist_kleiner_B := A < B;
         Verglichen := true;
         lVerglichen := true;
     end;
     end;
</syntaxhighlight>
</source>
 
{{Achtung|Boolshe Variablen, welche von OBS an den Scripter über die Parameter als variante übergeben werden, werden als Zahlen interpretiert!<br/>
Dies führt dazu, dass diese boolsche Variablen nicht mit einem "not" negiert werden können.<br/>
<source lang=delphi>
    if (not lVariable) then begin //Falsch
 
    if (lVariable = False) then begin //Richtig
</source>}}
 


=Konstanten=
=Konstanten=
Zeile 32: Zeile 48:
<br />
<br />
In Makros lassen sich eigene Konstanten definieren. Das kann wie folgt aussehen:
In Makros lassen sich eigene Konstanten definieren. Das kann wie folgt aussehen:
<syntaxhighlight lang="Delphi">
 
const
<source lang="Delphi">
    GRUSS = 'Mit freundlichen Grüßen';
    const
    HOMEPAGE_HINWEIS = 'Besuchen Sie uns doch mal auf unserer Homepage unter www.unsere-seite.de und erfahren '+
        GRUSS = 'Mit freundlichen Grüßen';
                      'Sie mehr über die ergonomische Einrichtung von Arbeitsplätzen. Für aktuelle Informationen '+
        HOMEPAGE_HINWEIS = 'Besuchen Sie uns doch mal auf unserer Homepage unter www.unsere-seite.de und erfahren '+
                      'oder Aktionen könne Sie sich auf unserer Homepage für den Newsletter eintragen.';
                          'Sie mehr über die ergonomische Einrichtung von Arbeitsplätzen. Für aktuelle Informationen '+
</syntaxhighlight>
                          'oder Aktionen könne Sie sich auf unserer Homepage für den Newsletter eintragen.';
</source >
 
Eine Übersicht der Konstanten die vom OBS für Makros mitgeliefert werden finden Sie [[OBS/Makros#.C3.9Cbersicht_Konstanten|hier]].
Eine Übersicht der Konstanten die vom OBS für Makros mitgeliefert werden finden Sie [[OBS/Makros#.C3.9Cbersicht_Konstanten|hier]].


Zeile 45: Zeile 63:
<br />
<br />
Beispiel Prozedur:
Beispiel Prozedur:
<syntaxhighlight lang="Delphi">
<source lang="Delphi">
procedure Name(cParameter1: string; nParameter2: integer);
procedure Name(cParameter1: string; nParameter2: integer);
</syntaxhighlight>
</source>
 
Beispiel Funktion:
Beispiel Funktion:
<syntaxhighlight lang="Delphi">
<source lang="Delphi">
function Name(cParameter1: string; nParameter2: integer): boolean;
function Name(cParameter1: string; nParameter2: integer): boolean;
</syntaxhighlight>
</source>


=Bedingte Anweisungen=
=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.
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==
<syntaxhighlight lang="Delphi">
<source lang="Delphi">
     if Bedingung then begin
     if (Bedingung) then begin
         Befehl 1;
         Befehl1;
         Befehl 2;
         Befehl2;
         ...
         //...
     end;
     end;
</syntaxhighlight>
</source>
 
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.<br />
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.<br />
Alle Bedingungen sollen zutreffen:
Alle Bedingungen sollen zutreffen:
<syntaxhighlight lang="Delphi">
 
     if Bedingung1 and Bedingung2 then begin
<source lang="Delphi">
</syntaxhighlight>
     if (Bedingung1 and Bedingung2) then begin
        //code
    end;
</source>
 
Nur eine Bedingung muss zutreffen:
Nur eine Bedingung muss zutreffen:
<syntaxhighlight lang="Delphi">
 
     if Bedingung1 or Bedingung2 then begin
<source lang="Delphi">
</syntaxhighlight>
     if (Bedingung1 or Bedingung2) then begin
        //code
    end;
</source>
 
Nur Bedingung 1 oder Bedingung 2 und 3 (hier sind die Klammern wichtig!):
Nur Bedingung 1 oder Bedingung 2 und 3 (hier sind die Klammern wichtig!):
<syntaxhighlight lang="Delphi">
 
     if Bedingung1 or (Bedingung2 and Bedingung 3) then begin
<source lang="Delphi">
</syntaxhighlight>
     if (Bedingung1 or (Bedingung2 and Bedingung 3)) then begin
        //code
    end;
</source>
==case==
==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).<br />
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).<br />
Struktur:
Struktur:
<syntaxhighlight lang="Delphi">
<source lang="Delphi">
     case Wert of
     case Wert of
         Fall1 : Anweisung;
         Fall1 : Anweisung;
Zeile 90: Zeile 122:
         Standard-Anweisung
         Standard-Anweisung
     end;
     end;
</syntaxhighlight>
</source>
 
Es können als Bedingung (Fall) auch mehrere Angaben mit Komma getrennt erfolgen oder Bereiche mit zwei Punkten angegeben werden.<br />
Es können als Bedingung (Fall) auch mehrere Angaben mit Komma getrennt erfolgen oder Bereiche mit zwei Punkten angegeben werden.<br />
Beispiel:
Beispiel:
<syntaxhighlight lang="Delphi">
<source lang="Delphi">
     case Monat of
     case Monat of
         1,3,5,7..8,10,12 : Tage := 31;
         1,3,5,7..8,10,12 : Tage := 31;
Zeile 106: Zeile 139:
         Tage := 30;
         Tage := 30;
     end;
     end;
</syntaxhighlight>
</source>


=Schleifen=
=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.
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==
==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.
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==
==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.
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==
==repeat until==
Die eingefasste Code dieser fußgesteuerten Schleife wird '''wiederholt''', '''bis''' die Abbruch-Bedingung erfüllt wird.
Die eingefasste Code dieser fußgesteuerten Schleife wird '''wiederholt''', '''bis''' die Abbruch-Bedingung erfüllt wird.

Version vom 19. Dezember 2019, 13:23 Uhr


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

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 Monat of
        1,3,5,7..8,10,12 : Tage := 31;
        2 : begin
            if IstSchaltjahr then begin
                Tage := 29;
            end else begin
                Tage := 28;
            end;
        end;
    else
        Tage := 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.