我试图在一个TStrings.ValueFromIndex函数中使用FreePascal (它在FreePascal和Delphi中工作),但是它不起作用,编译器返回:
“GETVALUEFROMINDEX”的“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;发布于 2013-12-31 16:24:15
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,并在SIRegisterTStrings中添加一个注册了ValueFromIndex的调用。
发布于 2013-12-31 17:22:26
PascalScript不同于Delphi/FreePascal。如果您查看源代码 for PascalScript (特别是在uPSC_classes.pas中),您将看到PascalScript只是封装了一个本机Delphi/FreePascal TStringList,但并没有公开Delphi/FreePascal在TStringList中实际实现的所有内容。例如,没有为ValueFromIndex属性公开包装器。
更新:
由于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;https://stackoverflow.com/questions/20860080
复制相似问题