1

我正在尝试在 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;
4

2 回答 2

5

PascalScript 与 Delphi/FreePascal 不同。如果您查看 PascalScript 的源代码(特别是在. 例如,没有为该属性公开包装器。uPSC_classes.pasTStringListTStringListValueFromIndex

更新:

由于 PascalScript 不公开ValueFromIndex属性,您可以编写自己的代码手动解析字符串以删除其名称部分(如果您不修补 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;
于 2013-12-31T17:22:26.720 回答
2

PascalScriptTStrings是一个 Delphi TStrings,但ValueFromIndexPascalScript 没有公开该方法。这可以通过阅读看出SIRegisterTStrings

所以,你需要利用可用的东西。例如Values属性:

RESULTv := RESULTv + R.Names[i] + ' -> ' + R.Values[R.Names[i]];

或者你可能更喜欢避免一些重复

Name := R.Names[i];
RESULTv := RESULTv + Name + ' -> ' + R.Values[Name];

这是相当低效的,但除非您要自己解析名称/值对,否则这可能是您能做的最好的事情。

如果你有勇气,你可以自己编译 PascalScript,并RegisterMethodSIRegisterTStrings注册的ValueFromIndex.

于 2013-12-31T16:24:15.867 回答