我如何让我的代码正确地使用零基础?

how do i get my code worked with zerobased correctley?

我正在尝试迁移我的代码以供 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;

这里有一些问题。首先,ZEROBASEDSTRINGS 指令不会影响这段代码,因为您没有使用 [] 运算符。但是,我建议您将 ZEROBASEDSTRINGS 保留为 ON 并接受新方法。

字符串助手仅使用基于零的索引,如果您在代码中遵循这一点,它将减少混淆。

详情:

  • Remove returns 一个新的字符串,而不是修改它的参数。
  • IndexOf returns -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;

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