Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2013, 21:58   #1
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию Сортировка по 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

Вопрос: где ошибка и как поправить?
Pcrepair вне форума Ответить с цитированием
Старый 13.11.2013, 22:02   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Преобразуй в integer и сравнивай по значению, а не строки. Строка '99' больше '223', а вот в числовом виде наоборот
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2013, 22:07   #3
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

так а функцию какую? использовать? что то непонятно
Pcrepair вне форума Ответить с цитированием
Старый 13.11.2013, 22:13   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А что, никогда в integer не преобразовывал? StrToInt
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2013, 22:27   #5
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

типа того?
AnsiCompareStr(StrToInt(List.ValueF romIndex[Index2]), StrToInt(List.ValueFromIndex[Index1]))

но function AnsiCompareStr ( const String1, String2 : string ) : Integer; сравнивает строки и выдает число -1 или 0 или 1

непонятно
Pcrepair вне форума Ответить с цитированием
Старый 13.11.2013, 22:36   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

На AnsiCompareStr свет клином сошелся? IF ... ELSE и в Result -1, 0 или 1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2013, 22:54   #7
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

это типа: AnsiCompareStr(List.ValueFromIndex[Index2], List.ValueFromIndex[Index1]); слишком просто и не то что нужно?

а нужно усложнить, тут дело в том что в СПИСОК передается из ValueListEditor1 пара роророро=44 (точнее много таких пар), их надо в списке отсортировть по число и вернуть обратно в ValueListEditor1
не испортив пары

так что тут придумать? можно..
что то никак не пойму, может в списке в принципе нельзя отсортировать как надо?
Pcrepair вне форума Ответить с цитированием
Старый 13.11.2013, 23:04   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
Result:=CompareValue(StrToInt(List.ValueFromIndex[Index2]),StrToInt(List.ValueFromIndex[Index1]));
Предвидя следующий вопрос - добавить юнит Math
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2013, 23:12   #9
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

ну вот, теперь работает
большое спасибо, глубоко же эта функция заныкалась в юнит Math, сразу и не понятно где искать.

а может там есть функция для сравнения нецелых чисел, типа пропрп=3,45
не INTEGER а Real или в общем дробное число????
Pcrepair вне форума Ответить с цитированием
Старый 13.11.2013, 23:17   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

вы бы про эту почитали, может и она умеет..
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка построчно ValueListEditor Delphi Венгельс Помощь студентам 0 05.06.2011 17:26
Сортировка построчно ValueListEditor Венгельс Помощь студентам 0 05.06.2011 14:38
ValueListEditor Pasha_Sh Помощь студентам 1 26.11.2010 13:19
ValueListEditor StartMis Общие вопросы Delphi 3 23.12.2009 01:02
ValueListEditor deadh5n1 Компоненты Delphi 2 31.05.2008 22:54