Форум по 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, в событии сортировка:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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 и т.д.)
Данные в таблице смешанные.
Нужно, чтобы числа сортировались как числа, слова - как строки.
Как реализовать такую сортировку?
Ответить с цитированием
 


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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