2015-11-05 25 views
2

i`am试图迁移我的代码在Android上进行工作,所以我在这里读http://docwiki.embarcadero.com/RADStudio/XE8/en/Migrating_Delphi_Code_to_Mobile_from_Desktop如何让我的代码与zerobased correctley一起工作?

,我知道我还没有上使用posdeletezerobased或我必须把zero based off,我觉得不好吃关于zero based off

转弯,所以我解决我的代码,我改变p := Pos(Sep, S);p := S.IndexOf(Sep, 0,0);但IAM无法使用删除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; 

回答

3

这里有几个问题。首先,ZEROBASEDSTRINGS指令不会影响任何此代码,因为您不使用[]运算符。但是,我建议您将ZEROBASEDSTRINGS作为ON并采用新方法。

字符串助手仅使用基于零的索引,并且如果您在代码中效仿,它将减少混淆。

至于细节:

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

我会写这样的代码:

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; 

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

+0

非常感谢你很多大卫很多帮助我很多 – MartinLoanel

+0

对不起,但是,在新版本的德尔福字符串是一个对象?哇;/ –

+0

@TheNorth号这是旧的类型。但助手可以用来扩展其方法范围。所有这些方法都由RTL助手TStringHelper提供。 –

相关问题