Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.11.2013, 21:50
Pcrepair
 
Сообщения: n/a
По умолчанию Сортировка по VALUE в ValueListEditor

Добрый день. Есть процедура,которая сортирует пару KEY--VALUE(слово--число) по значению VALUE и передает результат в ValueListEditor, для просмотра
Код:
procedure SortVLE;
(*---------------------------*)
function MyCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := AnsiCompareStr(List.ValueFromIndex[Index2], List.ValueFromIndex[Index1])
end;
(*---------------------------*)

var
  fSL : TStringList;
begin
  fSL := TStringList.Create;
  try
    fSL.Text := MainForm.ValueListEditor1.Strings.Text;
    fSL.CustomSort(@MyCompare);
    MainForm.ValueListEditor1.Strings.Text := fSL.Text;
  finally
    FreeAndNil(fSL);
  end
end;
Но сортировка идет немного не так как нужно, в частности:
рпрпропопр--99
пиропиррор--87
прррпррппр--33
титититьит--223
рпрпрпрпрр--12

хотя строка титититьит--223 в ValueListEditor должна быть наверху так как 223 больше чем 99

Вопрос: где ошибка и как поправить?
Ответить с цитированием
  #2  
Старый 13.11.2013, 23:49
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Потому что числа у тебя сравниваются как строки. Переводи стоку в число и потом сравнивай.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 14.11.2013, 09:47
Pcrepair
 
Сообщения: n/a
По умолчанию

ага

Код:
function MyCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result:=CompareValue(StrToFloat(List.ValueFromIndex[Index2]),StrToFloat(List.ValueFromIndex[Index1]));
end;
там еще дробные числа нужно обрабатывать
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter