Scripting Syntax

Grundelemente

Hier eine Auflistung der wichtigsten Grundelemente der CLARC ENTERPRISE Scriptsprache (Delphi-Script):

  • begin .. end constructor
  • procedure and function declarations
  • if .. then .. else constructor
  • for .. to .. do .. step constructor
  • while .. do constructor
  • repeat .. until constructor
  • try .. except and try .. finally blocks
  • case statements
  • array constructors (x:=[ 1, 2, 3 ];)
  • ^ , * , / , and , + , - , or , <> , >=, <= , = , > , < , div , mod , xor , shl , shr operators
  • access to object properties and methods ( ObjectName.SubObject.Property )

Script Strukturen

Die Script Struktur besteht allgemein aus zwei großen Blöcken welche jedoch optional sind. Wie in Pascal sollten Statements mit einem “;“ abgeschlossen werden. „Begin … end“ Blöcke sind zugelassen um Statements zu gruppieren.

Ein Script kann auch ganz ohne Begin … End Block oder Prozeduren und Funktionen programmiert werden.

  • procedure and function declarations
  • main block

Beispiel:

procedure DoSomething;
begin
  CallSomething;
end;

begin
  CallSomethingElse;
end;

Script Identifier

Identifier Namen im Script (Namen von Variablen, Funktionen und Prozeduren etc.) folgen den folgenden Regeln:

  • Sie sollten mit einem der folgenden Zeichen beginnen (a..z or A..Z), oder '_'
  • Weitere Zeichen können alphanumerisch sein

Assign statements

Assign statements (Zuordnung eines Werts oder Ausdrucks zu einer Variable oder Objekt Eigenschaft) werden mittels eines „:=“ erstellt.

Beispiel:

MyVar := 2;
MyVar := 'This ' + 'is ok.';

Stringverarbeitung

Strings (Zeichensequenzen) werden in Pascal mittels des Zeichens (’) deklariert. (“) werden nicht verwendet.

Zusätzlich können mittels des Zeichens # innerhalb eines Strings einzelne Zeichen deklariert werden.

Einzelne Zeichenketten können mittels eines „+“ Zeichens miteinander verknüpft werden.

Beispiel:

A   := 'This is a text';
Str := 'Text '+'concat';
B   := 'String with CR and LF char at the end'#13#10;
C   := 'String with '#33#34' characters in the middle';

Kommentare

Kommentare werden innerhalb von Scripts verwendet.

Zum Beispiel // zum Kommentieren einer Zeile oder { } um ganze Blöcke als Kommentar zu markieren.

// Example Comment
// ...


{
  Block-Comment
  ...
}

Hinweis

Bitte beachten Sie, dass eine Blockmarkierung immer mit dem ersten Auftreten eines "}" Zeichens beendet wird. Dabei kann das "}" Zeichen sich auch innerhalb eines Strings befinden.

Variablen

Variablen müssen nicht explizit deklariert werden. Dies bedeutet das Variablen mit der ersten Verwendung automatisch deklariert werden. Machen Sie dies am besten mit einer direkten Initialwertzuweisung.

Beispiel:

myVar := 0;
ShowMessage( myVar ); 

Indexzugriffe

Strings, Arrays und Array Eigenschaften können mittels "[" and "]" indexiert werden. Zum Beispiel, wenn Str eine String Variable ist, Str[3] gibt das dritte Zeichen des Strings zurück.

Beispiel:

MyChar           := MyStr[2];
MyStr[1]         := 'A';
MyArray[1,2]     := 1530;
Lines.Strings[2] := 'Sometext';

Arrays

Verwendung von ein Ein- und Mehrdimensionalen-Arrays.

NewArray        := [2,4,6,8 ];
Num             := NewArray[1]; //Num receives "4"
MultiArray      := [ ['green','red','blue'] , ['apple','orange','lemon'] ];
Str             := MultiArray[0,2]; //Str receives 'blue'
MultiArray[1,1] := 'new orange';
procedure ArrayExample(MyArray);
begin
  showmessage(MyArray[3]); // Shows "D"
end;

begin
  ArrayExample(['A','B','C','D']);
end;

If Statements

Es gibt zwei Formen der If Abfrage: if...then und the if...then...else. Falls die Abfrage true ist, wird der entsprechende block (begin … end) ausgeführt.

Beispiel: 

if J <> 0 then Result := I/J;
if J = 0 then Exit else Result := I/J;

if J <> 0 then
begin
  Result := I/J;
end else Done := True;

Hier noch ein Beispiel mit verschachtelten Logikoperatoren:

if ((i = 10) or (Name = 'clarc')) and (length(Name) > 0) then 
begin
  // ...
end;

Boolsche Prüfungen:

i := 0;
if ((i = 0) = true) then
begin
  ShowMessage((i = 0)); // Shows "True"
end;

While Statements

Verwendung von While Schleifen.

i := 0;
while i < 10 do
begin
  DoSomething;
  inc(i); 
end;

Repeat Statements

Verwendung von Repeat Schleifen.

i := 0;
repeat
  i := i + 1;
  DoSomething;
until i = 10; 

For Statements

Verwendung von For Schleifen.

for c:=1 to 10 do
begin
  a := a + c;
  ShowMessage( a );
end; 

Case Statements

Verwendung von Case Statements.

case lowercase(Fruit) of
  'lime'           : ShowMessage('green');
  'orange'         : ShowMessage('orange');
  'apple','cherry' : ShowMessage('red');
  else               ShowMessage('black');
end; 

Funktionen und Prozeduren

Aufbau und Verwendung von Prozeduren.

procedure HelloWord;
begin
  ShowMessage('Hello world!');
end;

procedure UpcaseMessage(Msg);
begin
  ShowMessage(Uppercase(Msg));
end;

function TodayAsString;
begin
  Result := DateToStr(Date);
end;

function Max(A,B);
begin
  if A>B 
    then Result := A
    else Result := B;
end;

procedure SwapValues(var A, B);
Var 
  Temp;
begin
  Temp:=A;
  A:=B;
  B:=Temp;
end;

Laufzeitfehler behandeln

Wie können Laufzeitfehler abgefangen und behandelt werden.

Try
  Try
    DoSomethingWithError;
  Except
    // Behandlung der Exception
  End;
Finally
  // Abschliessende Verarbeitungen wird immer ausgeführt
  // auch bei einer Exception
End;

Exceptions auswerten:

try
  Raise('Example Exception');
except
  // Hier wird der Text der letzten Exception ausgegeben
  ShowMessage(LastExceptionMessage);

  // ...und kann entsprechend behandelt werden
  if pos('Example', LastExceptionMessage) > 0 then
  begin
    // Do Something...
  end;
end;