功能
下面将介绍 DelphiScript 语言常用的函数语句。DelphiScript 函数的范围将在 FileIO 例程、数学例程、字符串例程和扩展例程等章节中介绍。
使用求值函数计算表达式
内置函数 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;
文件 IO 例程
DelphiScript 有以下 IO 例程:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 中使用设置
Embarcadero Delphi 的 SetIn+, -, *, = >=
DelphiScript 没有集合类型。要在 DelphiScript 脚本中使用集合,请使用内置函数; MkSetMkSetRangeInSetSetUnionSetDifferenceSetIntersectionSubSet
集合操作符
|
|
- |
|
* |
|
|
|
|
|
|
|
|
|
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 - A - BSetDifference(A, B)
SetIntersection 函数
函数 SetIntersection * A * BSetIntersection(A, B)
子集函数
子集函数 SubSet=A = BSubSet(A, B)
使用异常处理程序
关键字 Try
Try-Finally
使用 Try-Finally,无论 Try 代码块、Exit 或 Break 是否出现异常,Finally 代码块中的语句始终会被执行。使用 Try-Finally 块释放临时对象和其他资源,并执行清理活动。
通常情况下,一个子程序中只需要一条 Try-Finally 语句。
Reset(F); Try // process file F Finally CloseFile(F); End;
Try-Except
使用 Try-Except 来处理异常情况。例如,捕获特定的异常并对其进行有用的处理,如将其记录在错误日志中或创建一个友好的对话框。由于 OnRaiseExcept
Try X := Y/Z; Except Raise('A divide by zero error!'); End;
提升
关键字 RaiseTryRaise
Raise(Format('Invalid Value Entered : %d', [Height]));
请注意,由于 OnException