【问题标题】:how do i get my code worked with zerobased correctley?我如何让我的代码正确地从零开始工作?
【发布时间】:2015-11-05 16:18:48
【问题描述】:

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

【问题讨论】:

    标签: android delphi delphi-xe7


    【解决方案1】:

    这里有几个问题。首先,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;
    

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

    【讨论】:

    • 非常感谢大卫,这对我有很大帮助
    • 对不起,在较新版本的 Delphi 中,字符串是一个对象?哇;/
    • @TheNorth 没有。它是相同的旧类型。但是助手可以用来扩展它的方法范围。所有这些方法都由 RTL 帮助器 TStringHelper 提供。
    猜你喜欢
    • 2022-11-16
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    相关资源
    最近更新 更多