Funktionen
Die gebräuchlichen Funktionsanweisungen der DelphiScript-Sprache werden nachfolgend behandelt. Der Umfang der DelphiScript-Funktionen wird in Abschnitten zu FileIO-Routinen, mathematischen Routinen, String-Routinen und Erweiterungsroutinen dargestellt.
Berechnung von Ausdrücken mit der Evaluate-Funktion
Die integrierte Funktion Evaluate interpretiert zur Laufzeit eine Zeichenfolge, die einen gültigen mathematischen Ausdruck enthält, und gibt ein Ergebnis zurück. Sie können beispielsweise ein Skript wie Evaluate(ProcNames[ProcIndex]); schreiben, und die in ProcNames[ProcIndex] angegebene Prozedur wird aufgerufen.
Um einen solchen Ausdruck zu berechnen, können Sie die Evaluate-Methode verwenden, wobei der Ausdruck durch den Expr-Parameter angegeben wird. Sie können zum Beispiel Ausdrücke wie die folgenden berechnen:
Evaluate('2+5');
Evaluate('((10+15)-5)/2*5');
Evaluate('sin(3.1415926/2)*10');
Evaluate('2.5*log(3)');
Übergabe von Parametern an Funktionen und Prozeduren
Sowohl in einem Skript definierte Funktionen als auch Prozeduren können so deklariert werden, dass sie Parameter akzeptieren. Zusätzlich sind Funktionen so definiert, dass sie einen Wert zurückgeben. Parametertypen in Prozedur-/Funktionsdeklarationen werden ignoriert und können weggelassen werden. Zum Beispiel ist dieser Code korrekt:
Function sum(a, b) : integer;
Begin
Result := a + b;
End;
Verlassen einer Prozedur
DelphiScript stellt die Anweisungen Exit und Break bereit, um das vorzeitige Verlassen einer Prozedur zu erzwingen, bevor sie auf natürliche Weise beendet würde. Wenn zum Beispiel der Wert eines Parameters nicht geeignet ist, möchten Sie den Benutzer möglicherweise warnen und die Prozedur verlassen, wie das folgende Beispiel zeigt.
Procedure DisplayName (s);
Begin
If s = '' Then
Begin
ShowMessage('Please enter a name');
Exit;
End;
ShowMessage(S + ' is shown');
End;
File-IO-Routinen
DelphiScript verfügt über die folgenden IO-Routinen:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelphiScript ermöglicht es Ihnen, Informationen in eine Textdatei zu schreiben, und da DelphiScript eine typfreie Sprache ist, müssen alle Werte zunächst in Zeichenfolgen konvertiert werden.
Hier sind die Routinen Read und ReadLn äquivalent — sie lesen eine Zeile bis zur nächsten Zeile, diese jedoch nicht eingeschlossen. Eine Writeln(String)-Routine ist äquivalent zu einer Write(S)- und einer Write(LineFeed + CarriageReturn)-Routine.
Um eine Textdatei zu schreiben, verwenden Sie die Prozeduren AssignFile, ReWrite, Writeln und CloseFile. Um eine Textdatei zu lesen, verwenden Sie die Prozeduren AssignFile, Reset, Readln und CloseFile. Das folgende Beispiel schreibt in eine Textdatei und fügt eine Zeilenendemarkierung hinzu. Die Verwendung des Try / Finally / End-Blocks wird empfohlen, um Skripte im Falle eines IO-Fehlers sicher zu machen.
Example:
Var
InputFile : TextFile;
OutputFile : TextFile;
I : Integer;
Line : String;
Begin
AssignFile(OutputFile,eConvertedFile.Text);
Rewrite(OutputFile);
AssignFile(InputFIle,eOriginalFIle.Text);
Reset(InputFile);
Try
While not EOF(InputFile) do
Begin
Readln(InputFile,Line);
For I := 1 to Length(Line) Do
Line[I] := UpperCase(Line[I]);
Writeln(Outputfile, Line);
End;
Finally
CloseFile(InputFile);
CloseFile(OutputFile);
End;
End;
Mathematische Routinen
DelphiScript verfügt über die folgenden mathematischen Routinen:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String-Routinen
DelphiScript verfügt über die folgenden String-Routinen, mit denen Zeichenfolgen oder Zeichen bearbeitet werden können. In der folgenden Tabelle wird nur eine Teilmenge der String-Routinen gezeigt (die meisten von DelphiScript verwendeten String-Routinen werden aus Embarcadero Delphis SysUtils-Unit importiert):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Die von DelphiScript not unterstützten String-Routinen sind in der folgenden Tabelle aufgeführt:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Erweiterungsroutinen
Erweiterungsroutinen werden verwendet, wenn in Skripten mit Serverprozessen gearbeitet wird (ein Befehl ist ein paketierter Serverprozess mit Parametern, falls vorhanden), insbesondere wenn Sie Zeichenfolgen für die Parameter von Prozessen extrahieren oder festlegen müssen. Einige der Routinen sind unten aufgeführt.
Um Parameter von Prozessen in einem Skript auszuführen, können die folgenden Funktionen erforderlich sein:
|
|
|
|
|
|
|
|
|
Useful functions:
|
|
|
|
|
|
|
|
|
Useful dialogs:
|
|
|
|
|
|
Verwendung von Mengen in DelphiScript
Die Schlüsselwörter Set und In von Embarcadero Delphi sowie die Mengenoperatoren +, -, *, <= und >= werden in DelphiScript nicht unterstützt. Die entsprechenden Schlüsselwörter für Mengenoperatoren sind unten tabellarisch aufgeführt.
DelphiScript hat keine Mengentypen. Um Mengen in DelphiScript-Skripten zu verwenden, nutzen Sie die integrierten Funktionen MkSet, MkSetRange, InSet, SetUnion, SetDifference, SetIntersection und SubSet, mit denen Mengen in einem DelphiScript-Skript bearbeitet werden können. Diese werden unten ausführlicher beschrieben.
Mengenoperatoren
Embarcadero Delphi Set Operator keyword |
Equivalent DelphiScript Set Operator keyword |
|---|---|
|
|
- |
|
* |
|
|
|
|
|
|
|
|
|
MkSet-Funktion
Die Funktion MkSet ist ein Mengenkonstruktor mit einer variablen Anzahl von Argumenten. Zum Beispiel:
Font.Style = MkSet(fsBold,fsItalic);
Das MkSet(fsBold,fsItalic) bezeichnet hier nur zwei Mengenelemente: fsBold und fsItalic.
MkSetRange-Funktion
Die Funktion MkSetRange ist ein Mengenkonstruktor mit einem Argumentbereich. Zum Beispiel:
LayerSet := MkSetRange(eTopLayer,eBottomLayer);
Die Funktion MkSetRange(eTopLayer,eBottomLayer) bezeichnet einen Bereich von Layern von eTopLayer bis eBottomLayer.
InSet-Funktion
Diese Funktion InSet wird als Ersatz für Delphis Operator In verwendet. A in B ist gleich InSet(A, B).
If InSet(A,B) then
ShowMessage('A is in B set')
Else
ShowMessage('A not in B set');
SetUnion-Funktion
Die Funktion SetUnion wird als Ersatz für Delphis Operator + verwendet. A + B ist gleich SetUnion(A, B).
ASet := BSet + CSet;
// should be changed to:
ASet := SetUnion(BSet,CSet);
// in order to achieve the desired script result.
SetDifference-Funktion
Die Funktion SetDifference wird als Ersatz für Delphis Operator - verwendet. A - B ist gleich SetDifference(A, B).
SetIntersection-Funktion
Die Funktion SetIntersection wird als Ersatz für Delphis Operator * verwendet. A * B ist gleich SetIntersection(A, B).
SubSet-Funktion
Die Funktion SubSet wird als Ersatz für Object Pascals Operator <= verwendet. A <= B ist gleich SubSet(A, B).
Verwendung von Ausnahmebehandlern
Das Schlüsselwort Try leitet eine Try-Except-Anweisung oder eine Try-Finally-Anweisung ein. Diese beiden Anweisungen sind verwandt, dienen jedoch unterschiedlichen Zwecken:
Try-Finally
Bei Try-Finally werden die Anweisungen im Finally-Block immer ausgeführt, unabhängig davon, ob eine Ausnahme aus dem Try-Block, Exit oder Break auftritt. Verwenden Sie den Try-Finally-Block, um temporäre Objekte und andere Ressourcen freizugeben und Bereinigungsaktivitäten durchzuführen.
Typischerweise wird in einer Unterroutine nur eine Try-Finally-Anweisung benötigt.
Example:
Reset(F);
Try
// process file F
Finally
CloseFile(F);
End;
Try-Except
Verwenden Sie Try-Except, um Ausnahmefälle zu behandeln. Zum Beispiel, um bestimmte Ausnahmen abzufangen und etwas Nützliches damit zu tun, etwa sie in einem Fehlerprotokoll zu protokollieren oder ein benutzerfreundliches Dialogfeld zu erstellen. Da das Schlüsselwort On in DelphiScript nicht unterstützt wird, wird die Anweisung Raise innerhalb des Blocks Except verwendet.
Example:
Try
X := Y/Z;
Except
Raise('A divide by zero error!');
End;
Raise
Das Schlüsselwort Raise steht in Zusammenhang mit dem Schlüsselwort Try. Das Schlüsselwort Raise kann ohne Parameter verwendet werden, um die letzte Ausnahme erneut auszulösen. Es kann auch mit einem Zeichenfolgenparameter verwendet werden, um mit einer bestimmten Meldung eine Ausnahme auszulösen.
Example:
Raise(Format('Invalid Value Entered : %d', [Height]));
Beachten Sie, dass die Objekte Exception (verfügbar in Embarcadro Delphi) nicht verwendet werden können, da das Schlüsselwort On nicht unterstützt wird.