Funktionen
Im Folgenden werden die gängigen Funktionsanweisungen der Sprache DelphiScript behandelt. Die Palette der DelphiScript-Funktionen wird in Abschnitten zu Datei-E/A-Routinen, mathematischen Routinen, Zeichenfolgen-Routinen und Erweiterungsroutinen vorgestellt.
Berechnung von Ausdrücken mit der Funktion „Evaluate“
Die integrierte Funktion EvaluateEvaluate(ProcNames[ProcIndex]);ProcNames[ProcIndex]
Um einen solchen Ausdruck zu berechnen, können Sie die EvaluateExpr
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. Darüber hinaus sind Funktionen so definiert, dass sie einen Wert zurückgeben. Die Typen der Parameter in Prozedur-/Funktionsdeklarationen werden ignoriert und können weggelassen werden. Der folgende Code ist beispielsweise korrekt:
Function sum(a, b) : integer; Begin Result := a + b; End;
Beenden einer Prozedur
DelphiScript bietet ExitBreak
Procedure DisplayName (s); Begin If s = '' Then Begin ShowMessage('Please enter a name'); Exit; End; ShowMessage(S + ' is shown'); End;
Datei-E/A-Routinen
DelphiScript verfügt über die folgenden E/A-Routinen:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelphiScript bietet Ihnen die Möglichkeit, Informationen in eine Textdatei zu schreiben. Da DelphiScript eine typfreie Sprache ist, müssen alle Werte zunächst in Zeichenfolgen konvertiert werden.
Hier ReadReadLnWriteln(String)Write(S)Write(LineFeed + CarriageReturn)
Um eine Textdatei zu schreiben, verwenden Sie die AssignFileReWriteWritelnCloseFileAssignFileResetReadlnCloseFileTry / Finally / End
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;
Mathematikroutinen
DelphiScript verfügt über die folgenden mathematischen Routinen:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Zeichenfolgenroutinen
DelphiScript verfügt über die folgenden Zeichenfolgenroutinen, mit denen Zeichenfolgen oder Zeichen bearbeitet werden können. In der folgenden Tabelle ist nur eine Teilmenge der Zeichenfolgenroutinen aufgeführt (die meisten von DelphiScript verwendeten Zeichenfolgenroutinen werden aus der SysUtils-Unit von Embarcadero Delphi importiert):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Die von
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Erweiterungsroutinen
Erweiterungsroutinen werden verwendet, wenn in Skripten mit Serverprozessen gearbeitet wird (ein Befehl ist ein verpackter Serverprozess mit gegebenenfalls vorhandenen Parametern), insbesondere wenn Zeichenfolgen für die Parameter von Prozessen extrahiert oder gesetzt werden müssen. Einige dieser Routinen sind im Folgenden aufgeführt.
Um Prozessparameter in einem Skript auszuführen, können die folgenden Funktionen erforderlich sein:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Verwendung von Sets in DelphiScript
Embarcadero Delphis SetIn+, -, *, = >=
DelphiScript verfügt über keine Mengen-Typen. Um Mengen in DelphiScript-Skripten zu verwenden, nutzen Sie die integrierten Funktionen; MkSetMkSetRangeInSetSetUnionSetDifferenceSetIntersectionSubSet
Mengenoperatoren
|
|
- |
|
* |
|
|
|
|
|
|
|
|
|
MkSet-Funktion
Die MkSet
Font.Style = MkSet(fsBold,fsItalic);
Das MkSet(fsBold,fsItalic) fsBoldfsItalic
MkSetRange-Funktion
Die MkSetRange
LayerSet := MkSetRange(eTopLayer,eBottomLayer);
Die MkSetRange(eTopLayer,eBottomLayer)eTopLayereBottomLayer
InSet-Funktion
Diese InSetInA in BInSet(A, B)
If InSet(A,B) then ShowMessage('A is in B set') Else ShowMessage('A not in B set');
Funktion „SetUnion“
Die SetUnion + A + BSetUnion(A, B)
ASet := BSet + CSet; // should be changed to: ASet := SetUnion(BSet,CSet); // in order to achieve the desired script result.
Funktion „SetDifference“
Die SetDifference - A - BSetDifference(A, B)
Funktion „SetIntersection“
Die SetIntersection * A * BSetIntersection(A, B)
SubSet-Funktion
Die SubSet=A = BSubSet(A, B)
Verwendung von Ausnahmebehandlungsroutinen
Das Try
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 Aufräumarbeiten durchzuführen.
In der Regel wird in einer Subroutine nur eine Try-Finally-Anweisung benötigt.
Reset(F); Try // process file F Finally CloseFile(F); End;
Try-Except
Verwenden Sie „Try-Except“, um Ausnahmefälle zu behandeln. Beispielsweise, um bestimmte Ausnahmen abzufangen und sinnvoll damit umzugehen, wie sie in einem Fehlerprotokoll zu erfassen oder ein benutzerfreundliches Dialogfeld anzuzeigen. Da das OnRaiseExcept
Try X := Y/Z; Except Raise('A divide by zero error!'); End;
Raise
Das RaiseTryRaise
Raise(Format('Invalid Value Entered : %d', [Height]));
Beachten Sie, dass das OnException