機能
以下では、DelphiScript 言語で使用される一般的な関数文について解説します。DelphiScript の関数は、FileIO ルーチン、数学ルーチン、文字列ルーチン、および拡張ルーチンの各セクションに分けて紹介されています。
Evaluate関数による式の評価
組み込み関数 EvaluateEvaluate(ProcNames[ProcIndex]);ProcNames[ProcIndex]
このような式を計算するには、 EvaluateExpr
Evaluate('2+5'); Evaluate('((10+15)-5)/2*5'); Evaluate('sin(3.1415926/2)*10'); Evaluate('2.5*log(3)');
関数およびプロシージャへのパラメータの渡し方
スクリプト内で定義された関数とプロシージャは、いずれもパラメータを受け取るように宣言できます。また、関数は値を返すように定義されます。プロシージャや関数の宣言におけるパラメータの型は無視されるため、省略可能です。たとえば、次のコードは正しいです:
Function sum(a, b) : integer; Begin Result := a + b; End;
プロシージャからの終了
DelphiScriptでは ExitBreak
Procedure DisplayName (s); Begin If s = '' Then Begin ShowMessage('Please enter a name'); Exit; End; ShowMessage(S + ' is shown'); End;
ファイル I/O ルーチン
DelphiScript には、以下の I/O ルーチンがあります。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelphiScript では、テキストファイルに情報を書き込むことができます。DelphiScript は型付けのない言語であるため、すべての値はまず文字列に変換する必要があります。
ここで、 ReadReadLnWriteln(String)Write(S)Write(LineFeed + CarriageReturn)
テキストファイルを出力するには、 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;
数学ルーチン
DelphiScript には、以下の数学ルーチンがあります:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
文字列ルーチン
DelphiScript には、文字列や文字を操作できる以下の文字列ルーチンがあります。以下の表には、文字列ルーチンの一部のみが示されています(DelphiScript で使用される文字列ルーチンのほとんどは、Embarcadero Delphi の SysUtils ユニットからインポートされています)。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelphiScriptが
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
拡張ルーチン
拡張ルーチンは、スクリプト内でサーバープロセス(コマンドとは、パラメータがある場合はそれを伴うパッケージ化されたサーバープロセスです)を扱う際、特にプロセスのパラメータとして文字列を抽出または設定する必要がある場合に使用されます。そのうちのいくつかを以下に示します。
スクリプト内でプロセスのパラメータを実行するには、以下の関数が必要になる場合があります:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelphiScript でのセットの使用
Embarcadero Delphiの SetIn+, -, *, = >=
DelphiScript には集合型はありません。DelphiScript スクリプトで集合を使用するには、組み込み関数を使用してください。 MkSetMkSetRangeInSetSetUnionSetDifferenceSetIntersectionSubSet
集合演算子
|
|
- |
|
* |
|
|
|
|
|
|
|
|
|
MkSet関数
MkSet MkSet
Font.Style = MkSet(fsBold,fsItalic);
この MkSet(fsBold,fsItalic) fsBoldfsItalic
MkSetRange関数
MkSetRange
LayerSet := MkSetRange(eTopLayer,eBottomLayer);
この MkSetRange(eTopLayer,eBottomLayer)eTopLayereBottomLayer
InSet関数
この InSetInA in BInSet(A, B)
If InSet(A,B) then ShowMessage('A is in B set') Else ShowMessage('A not in B set');
SetUnion 関数
この SetUnion + A + BSetUnion(A, B)
ASet := BSet + CSet; // should be changed to: ASet := SetUnion(BSet,CSet); // in order to achieve the desired script result.
SetDifference 関数
この SetDifference - A - BSetDifference(A, B)
SetIntersection 関数
この SetIntersection * A * BSetIntersection(A, B)
SubSet関数
この SubSet=A = BSubSet(A, B)
例外ハンドラの使用
キーワード Try
Try-Finally
Try-Finally では、Try ブロックからの例外、Exit、または Break の発生にかかわらず、Finally ブロック内の文は常に実行されます。Try-Finally ブロックは、一時オブジェクトやその他のリソースを解放し、クリーンアップ処理を行うために使用します。
通常、サブルーチン内では Try-Finally 文は 1 つだけで十分です。
Reset(F); Try // process file F Finally CloseFile(F); End;
Try-Except
Try-Except を使用すると、例外的なケースを処理できます。たとえば、特定の例外をキャッチして、エラーログに記録したり、わかりやすいダイアログボックスを表示したりするなど、適切な処理を行うことができます。DelphiScript では OnRaiseExcept
Try X := Y/Z; Except Raise('A divide by zero error!'); End;
Raise
キーワード RaiseTryRaise
Raise(Format('Invalid Value Entered : %d', [Height]));
なお、 OnException