2012-06-30 156 views
2

我有一個巨大的用戶列表,每個用戶都有它的ID,但它的ID號被搞砸所以如果有人能告訴我我該怎麼排序號的用戶,每個值都有這種形式如何按第一個數字對列表進行排序?

1:Stackoverflow 
or 
145000:Google 

如果我這樣做手工,我想我會失去我的心,因爲tehere超過70萬個records.Thanks您的時間和幫助....

+0

看到http://stackoverflow.com/questions/5134712/how-to-get-the-sort-order-in-delphi-as-in-windows-explorer – kludg

回答

10

提取這樣的數字:

function ID(const str: string): Integer; 
var 
    p: Integer; 
begin 
    p := Pos(':', str); 
    if p=0 then 
    raise Exception.CreateFmt('Invalid string format: %s', [str]); 
    Result := StrToInt(Copy(str, 1, p-1)); 
end; 

一旦你可以提取該ID作爲一個整數,然後可以寫入ac ompare函數。像這樣:

function CompareIDs(List: TStringList; Index1, Index2: Integer): Integer; 
begin 
    Result := CompareValue(
    ID(List[Index1]), 
    ID(List[Index2]) 
); 
end; 

CompareValue是一個RTL函數,返回-1,0或1取決於兩個操作數的相對值。

將這些積木填入TStringList.CustomSort並完成工作。

MyStringList.CustomSort(CompareIDs); 
+0

結果= ValueCompare(ID1,ID2 ); – Marck

+0

@Marck你的意思是'CompareValue'我認爲。我同意最好使用內置的例程,但我不知道它。我會更新答案。 –

相關問題