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.pas)を見ると、PascalScript がネイティブの Delphi/FreePascalTStringListをラップしているだけで、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;
于 2013-12-31T17:22:26.720 に答える
2

PascalScriptTStringsは DelphiTStringsですが、ValueFromIndexメソッドは PascalScript によって公開されていません。これは、 を読むとわかりSIRegisterTStringsます。

したがって、利用可能なものを利用する必要があります。たとえば、Valuesプロパティ:

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

または、との繰り返しを避けることを好むかもしれません

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

これはかなり非効率的ですが、名前と値のペアを自分で解析しない限り、これがおそらく最善の方法です。

勇気があれば、PascalScript を自分でコンパイルしRegisterMethodSIRegisterTStrings、登録済みの .xml に呼び出しを追加できますValueFromIndex

于 2013-12-31T16:24:15.867 に答える