Проблема с TStringList.CustomSort в больших списках

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблема с TStringList.CustomSort в больших списках

Сообщение NXP » 12.01.2009 04:35:54

Есть код:
Код: Выделить всё
implementation

{ TForm1 }

function CustomSorter(List: TStringList; Index1, Index2: integer): integer;
var
  s1,s2,
  as1, as2: string;
  a,b: integer;
begin

  {debug}
  writeln(index1, ' ', index2);

  as1:= '';
  as2:= '';
  s1:= List[Index1];
  s2:= List[Index2];
  {сравниваем число до знака %}
  for a:= 1 to length(s1) do if s1[a] <> '%' then as1:= as1 + s1[a] else break;
  for a:= 1 to length(s2) do if s2[a] <> '%' then as2:= as2 + s2[a] else break;
  a:= strtoint(as1);
  b:= strtoint(as2);
  if (a < b) then exit(1) else
    if (a > b) then exit(-1) else
      exit(0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var

  OSL: TStringList;

begin

  OSL:= TStringList.Create;
  OSL.Sorted:= True;
  OSL.Duplicates := dupIgnore;

  for ... {куча циклов}
       OSL.Add(ous + '#');
       {добовляем строки и пропускаем дубликаты}
  end;

  writeln('Strings count:',OSL.Count, ' Sorting... ');
  Application.ProcessMessages;

  OSL.Sorted:= False;
  OSL.CustomSort(@CustomSorter) ;
...
  OSL.Free;
end;


Типичная длинна строки - менее 100 символов.
Если получилось мало строк, то OSL.CustomSort(@CustomSorter) ; отработает нормально.
Если более 10 тыс, то:

Код: Выделить всё
10692 10709
10693 10709
10694 10709
10695 10709
10696 10709
10697 10709
10698 10709
10699 10709
10700 10709
10701 10709
10702 10709
10703 10709
10704 10709
10705 10709
10706 10709
10707 10709
10708 10709
TApplication.HandleException Unknown Run-Time error : 202
  Stack trace:
  $00403DFF
  $0040E817
  $0041BA19
  $00426873
  $004268D6
  $004268D6
  $004268D6
  $004268D6
  $004268D6
  $004268D6
  $004268D6
  $004268D6
  $004268D6
  $004268D6
  $004268D6
  $004268D6
  $004268D6

Опции оптимизации -O1 -CX - XX -Xs (Манипулирование не дало результата) Lazarus 0.9.26 Release
Неужели 10709 строк много?
Аватара пользователя
NXP
постоялец
 
Сообщения: 187
Зарегистрирован: 02.01.2008 16:11:56
Откуда: Воронеж

Re: Проблема с TStringList.CustomSort в больших списках

Сообщение Павел Ишенин » 12.01.2009 06:40:41

Пример генерирующий ошибку надо отправить в баг-трекер с описанием ошибки, операционной системы, widgetset, пр.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Проблема с TStringList.CustomSort в больших списках

Сообщение NXP » 13.01.2009 02:40:13

Павел Ишенин писал(а):Пример генерирующий ошибку надо отправить в баг-трекер

Может кто-нибудь это сделает за меня?
ps Некогда там регистрироваться :wink:
{Проект в прищепке Win32/XPsP3}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
NXP
постоялец
 
Сообщения: 187
Зарегистрирован: 02.01.2008 16:11:56
Откуда: Воронеж

Re: Проблема с TStringList.CustomSort в больших списках

Сообщение Павел Ишенин » 13.01.2009 06:51:30

Если нет времени регистрироваться, значит ошибка для вас не важная. А так как кроме вас о ней никто не сообщил значит и никому кроме вас тоже не важная. Чего мы будем зря время терять ее править.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Проблема с TStringList.CustomSort в больших списках

Сообщение NXP » 13.01.2009 09:12:43

Павел Ишенин писал(а):Если нет времени регистрироваться, значит ошибка для вас не важная.

Совершенно верно. Не важная, т.к еще жива Borland :lol:
А сколько девелоперов с такими глупыми ошибками сталкиваются, плюнут, и снова вернутся на Delphi или вообще уходят на Java... Сам такое наблюдал, и не раз :(
Аватара пользователя
NXP
постоялец
 
Сообщения: 187
Зарегистрирован: 02.01.2008 16:11:56
Откуда: Воронеж

Re: Проблема с TStringList.CustomSort в больших списках

Сообщение B4rr4cuda » 13.01.2009 16:18:36

Павел Ишенин писал(а):Если нет времени регистрироваться, значит ошибка для вас не важная. А так как кроме вас о ней никто не сообщил значит и никому кроме вас тоже не важная. Чего мы будем зря время терять ее править.

Интересное мнение, это официальная позиция разработчиков по поводу багов?
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Проблема с TStringList.CustomSort в больших списках

Сообщение Padre_Mortius » 13.01.2009 16:38:42

У меня проект отработал без проблем. Использовалась SVN версия лазаря и fpc 2.2.3. Система Linux GTK-2
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Проблема с TStringList.CustomSort в больших списках

Сообщение ev » 13.01.2009 16:42:05

Интересное мнение, это официальная позиция разработчиков по поводу багов?

нормальная позиция выбора приоритетов
если ошибка не важная, то ее можно исправить в последнюю очередь... ведь еще хватает ошибок с более высоким приоритетом ;)
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 41

Рейтинг@Mail.ru