|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
TStringList и его метод сортировки
Есть таблица StringGrid, в фиксированной строке создаются кнопки SpeedButton, к ним привязывается событие OnClick, в событии сортировка:
Код:
procedure TMainForm.SGSortToCol(Sender: TObject); var SlSort, SlRow : TStringList; i, j, aCol,LMax : Integer; SG: TStringGrid; begin aCol:=StrToInt(TSpeedButton(Sender).Name[Length(TSpeedButton(Sender).Name)]); //получаем номер сортируемой колонки SG:=TStringGrid(TSpeedButton(Sender).Parent); //получаем имя таблицы LMax:=Length(SG.Cells[aCol,1]); SlSort:= TStringList.Create; SlSort.Sorted:=False; for i:=1 to SG.RowCount-1 do begin SlRow:=TStringList.Create; SlRow.Assign(SG.Rows[i]); SlSort.AddObject(SG.Cells[aCol, i], SlRow); if Length(SG.Cells[aCol,i])>LMax then //ищем строку с максимальным кол-вом символов LMax:=Length(SG.Cells[aCol,i]); end; for i:=0 to SlSort.Count-1 do while Length(SlSort[i])<>lmax do SlSort[i]:=' '+SlSort[i]; //выравниваем кол-во пробелов showmessage(SlSort.Text); SlSort.Sort; j := 0; for i := 1 to SG.RowCount - 1 do begin SlRow := Pointer(SlSort.Objects[j]); SG.Rows[i].Assign(SlRow); SlRow.Free; Inc(j); end; SlSort.Free; end; При выравнивании кол-ва символов "корректно" сортируются "числа" (я понимаю, что тип строковый): за единицей идет двойка, а не десятка. Но неккоректно сортируются слова. И наоборот: без выравнивания слова сортируются нормально, "числа" - нет (1, 10, 100, 2, 3 и т.д.) Данные в таблице смешанные. Нужно, чтобы числа сортировались как числа, слова - как строки. Как реализовать такую сортировку? |
#2
|
||||
|
||||
приводи к единой длине только числа, дополняя их нулями слева.
Пишу программы за еду. __________________ |