Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

CustomSort в TStringList   Найти похожие ветки 

 
GanibalLector ©   (2005-06-30 23:26) [0]

TStringList имеет метод CustomSort,состоящий из TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer;
До недавнего времени я так и делал :

function NumbersSort(List: TStringList; Index1, Index2: Integer): Integer;
begin
 Result := -1;
 if StrToInt(List.Strings[Index1])>StrToInt(List.Strings[Index2])
  then Result := 1
 else
 if StrToInt(List.Strings[Index1]) = StrToInt(List.Strings[Index2])
   then Result := 0;
end;

function DoSort(OList:TObjectList):TObjectList;
 var i,ii:Integer;
  List:TStringList;
  Ob:TObject;
begin
 TStringList(OList.Items[0]).CustomSort(NumbersSort);
 Result:=TObjectList.Create;
 Result.Add(Olist.Items[0]);
 for i:= 1 to OList.Count-1 do
 begin
   List:=TStringList.Create;
   for ii:=0 to TStringList(OList.Items[0]).Count-1 do
   begin
     Ob:=TStringList(Result.Items[0]).Objects[ii];
     List.Add(TStringList(OList.Items[i])[TStringList(OList.Items[i]).IndexOfObject(Ob)]);
   end;
 Result.Add(List);
 OList.Items[i].Free;
 end;
end;

Вызывал так :  
  Q:=TObjectList.Create;
  ...// много чего
  Q:=DoSort(Q);



Так вот,время идет,задачи усложняются ;) теперь мне необходимо сортировать не Integer а Int64.
И ШО собственно делать??? Писать наследника от TStringList с новым методом TStringListSortCompare = function(List: TStringList; Index1, Index2: Int64): Integer;
В общем,как бы это сделать без лишнего головняка? Спасибо.


 
VMcL ©   (2005-07-01 00:07) [1]

StrToInt заменить на StrToInt64
?


 
GanibalLector ©   (2005-07-01 00:38) [2]

2 VMcL ©   (01.07.05 00:07) [1]
а толку? EConvertError with message "8000125484" is not a valid integer value.

Вот,примерчик Лукавый :

procedure TForm1.Button1Click(Sender: TObject);
 var Q:TObjectList;
 List:TStringList;
begin
  Q:=TObjectList.Create;

    List:=TStringList.Create;
    List.AddObject("8000125484",TObject(1)) ;
    List.AddObject("80030", TObject(2)) ;
    List.AddObject("55003", TObject(3)) ;
    Q.Add(List);
    //
    List:=TStringList.Create;
    List.AddObject("q",TObject(1)) ;
    List.AddObject("w", TObject(2)) ;
    List.AddObject("e", TObject(3)) ;
    Q.Add(List);
  Q:=DoSort(Q);
  StringGrid1.Cols[1]:=TStrings(Q.Items[0]);
  StringGrid1.Cols[2]:=TStrings(Q.Items[1]);
end;


 
GanibalLector ©   (2005-07-01 00:44) [3]

блин,тот пример работает ;)
А вот так:

List.AddObject("9999999999",TObject(1)) ;
уже не работает. Я вышел за границы Int64,блин :(


 
GanibalLector ©   (2005-07-01 00:49) [4]

2 GanibalLector ©   (01.07.05 00:44) [3]
>вышел за границы Int64,блин :(
Да нет,не вышел.А ШО ж такое???
 var x:Int64;
begin
  x := High(Int64);
  ShowMessage("Max  = "+IntToStr(x));


 
GanibalLector ©   (2005-07-01 00:53) [5]

Блин,сегодня я тупой :(
Все получилось. Во,гоню!!!



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.058 c
1-1119908714
Контр
2005-06-28 01:45
2005.07.18
TPageControl - как спрятать у него все заголовки ?


3-1118061964
Megabyte
2005-06-06 16:46
2005.07.18
Получение сегодняшней даты в FB


1-1120042870
sofs
2005-06-29 15:01
2005.07.18
Загрузка последеней версии файла


1-1120394853
Unknow
2005-07-03 16:47
2005.07.18
Как вписать данные в ListView


3-1117991302
dim2002
2005-06-05 21:08
2005.07.18
Сортировка в ADO