Главная страница
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.033 c
3-1118072253
SC
2005-06-06 19:37
2005.07.18
Ниспадающее меню в DBGridEh


1-1119918781
Витёк
2005-06-28 04:33
2005.07.18
память


8-1111581394
Alexey A.
2005-03-23 15:36
2005.07.18
Изменение размера JPEG-изображения


1-1118557977
Igor Stepanov
2005-06-12 10:32
2005.07.18
Искажения графика при передаче через буфер обмена в Excel


14-1119449626
Cosinus
2005-06-22 18:13
2005.07.18
Господа, кто рботал или работает админом... Подскажите по VPN...