如何让我的代码与zerobased correctley一起工作?

时间:2015-11-05 16:18:48

标签: android delphi delphi-xe7

我试图迁移我的代码以便在android上工作所以我在这里阅读http://docwiki.embarcadero.com/RADStudio/XE8/en/Migrating_Delphi_Code_to_Mobile_from_Desktop

我知道我没有使用posdeletezerobased,或者我必须转zero based off,我不会感觉很好zero based off

所以我处理我的代码我将p := Pos(Sep, S);更改为p := S.IndexOf(Sep, 0,0);,但我无法使用删除TStringHelper.Remove功能而不是删除

  while (S <> '') and (ParamsCount < 10) do
    begin
      Inc(ParamsCount);
      p := S.IndexOf(Sep, 0,0);
      //p := Pos(Sep, S);
      if p = 0 then
        Params[ParamsCount] := S
      else
      begin
        Params[ParamsCount] := Copy(S, 1, P - 1);
       TStringHelper.Remove(S, 1, P + 4); // here how do i use remove its only have integer parameter how to use Remove instead of Delete 
       //Delete(S, 1, P + 4);
      end;
    end;
  end;

1 个答案:

答案 0 :(得分:3)

这里有一些问题。首先,ZEROBASEDSTRINGS指令不影响任何此代码,因为您不使用[]运算符。不过,我建议您将ZEROBASEDSTRINGS保留为ON并采用新的方法。

字符串帮助程序专门使用基于零的索引,如果您在代码中效仿,它将减少混淆。

至于细节:

  • Remove返回一个新字符串,而不是修改其参数。
  • IndexOf返回-1表示未找到匹配项。
  • 使用Substring而不是Copy。后者使用基于旧学校的索引。您应该避开所有旧SysUtils函数并专门使用帮助程序。

我会写这样的代码:

p := S.IndexOf(Sep);
if p = -1 then
  Params[ParamsCount] := S
else
begin
  Params[ParamsCount] := S.Substring(0, P);
  S := S.Remove(0, P + 3);
end;

您的代码有点乱,因此上面可能会有一些错误。我试图从注释掉的代码中解读意图。但是,上面的代码演示了您应该采用的样式。