2015-11-05 24 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提供。 –

相關問題