我正在尝试在PascalScript函数中使用TStrings.ValueFromIndex(在FreePascal和Delphi中工作),但它不起作用,编译器返回:
未知标识符'GETVALUEFROMINDEX'
我使用得很好?是PascalScript中是否提供此功能?如果没有,有没有简单的方法可以做到?
代码:
Function dummy(R: TStringList):String;
var
i: Integer;
RESULTv: string;
begin
for i := 0 to ReqList.Count-1 do
RESULTv := RESULTv + R.Names[i]+' -> '+ R.ValueFromIndex[i];
dummy := RESULTv;
end;
答案 0 :(得分:5)
PascalScript与Delphi / FreePascal不同。如果你看一下PascalScript的source code(特别是在uPSC_classes.pas
中),你会发现PascalScript只是包装了一个原生的Delphi / FreePascal TStringList
,但是没有暴露Delphi / FreePascal的所有内容在TStringList
中实现。例如,没有为ValueFromIndex
属性公开包装器。
<强>更新强>
由于PascalScript不公开ValueFromIndex
属性,因此您可以编写自己的代码来手动解析String以删除其Name部分(如果您不修补PascalScript本身以添加缺少的属性注册),例如:
Function GetValueFromIndex(R: TStringList; Index: Integer):String;
var
S: string;
i: Integer;
begin
S := R.Strings[Index];
i := Pos('=', S);
if I > 0 then
ValueFromIndex := Copy(S, i+1, MaxInt)
else
ValueFromIndex := '';
end;
Function dummy(R: TStringList):String;
var
i: Integer;
RESULTv: string;
begin
for i := 0 to ReqList.Count-1 do
RESULTv := RESULTv + R.Names[i] + ' -> ' + GetValueFromIndex(R, i);
dummy := RESULTv;
end;
答案 1 :(得分:2)
PascalScript的TStrings
是Delphi TStrings
,但PascalScript不公开ValueFromIndex
方法。通过阅读SIRegisterTStrings
可以看到这一点。
所以,你需要利用可用的东西。例如Values
属性:
RESULTv := RESULTv + R.Names[i] + ' -> ' + R.Values[R.Names[i]];
或者你可能更愿意避免重复
Name := R.Names[i];
RESULTv := RESULTv + Name + ' -> ' + R.Values[Name];
这效率很低,但除非您打算自己解析名称/值对,否则可能是最好的。
如果您觉得自己很勇敢,可以自己编译PascalScript,并在注册RegisterMethod
的{{3}}中添加对ValueFromIndex
的调用。