![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день. Есть процедура,которая сортирует пару 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
|
||||
|
||||
|
Потому что числа у тебя сравниваются как строки. Переводи стоку в число и потом сравнивай.
|
|
#3
|
|||
|
|||
|
ага
Код:
function MyCompare(List: TStringList; Index1, Index2: Integer): Integer; begin Result:=CompareValue(StrToFloat(List.ValueFromIndex[Index2]),StrToFloat(List.ValueFromIndex[Index1])); end; там еще дробные числа нужно обрабатывать |