TStringList ValueFromIndex在PascalScript中不起作用

时间:2013-12-31 16:13:11

标签: delphi freepascal pascalscript

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

2 个答案:

答案 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的调用。