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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.04.2014, 15:02
kasimka kasimka вне форума
Прохожий
 
Регистрация: 08.04.2014
Адрес: Брест
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию 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  
Старый 13.04.2014, 15:14
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

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


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter