Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > сортировка в memo


Автор: Фрося 12.1.2006, 13:46
Здрасвуйте
у меня в компоненте Memo строки вида "Номер + : + Номер"

выглядит так
Код


4:12
4:13
4:14
4:11
4:10
3:16
3:15
3:21
.....


числа в строках могут быть разные, но вид строки всегда: ( Num + Separator + Num ).

Мне нужно чтобы этот список сортировался в порядке возрастания. smile








Автор: Snowy 12.1.2006, 13:57
Код

var
  sl: TStringList;
begin
  sl:=TStringList.Create;
  sl.Assign(Memo1.Lines);
  sl.Sort;
  Memo1.Lines.Assign(sl);
  sl.Free;
end;

Автор: Демо 12.1.2006, 18:21
Snowy

Не получится. Придется использовать TStringList.CustomSort

Автор: Snowy 12.1.2006, 19:05
Цитата(Демо @ 12.1.2006, 18:21 Найти цитируемый пост)
Не получится. Придется использовать TStringList.CustomSort

Не получится, если строки разной длины - будет сортировать согласно алфавита.
Если одной длины, как в примере - то все нормально.

Автор: delphixxx 18.1.2006, 18:02
Snowy
Демо

Спасибо за ответы, но я совсем забыла, строки дейсвительно могут быть разной длинны, просто в примере я это не учитывала.

теперь такой пример:
Код

4:121
4:13
4:142
4:11
4:103
3:16
3:154
3:2


на всякий случай хочу сказать первая цифра до ':' только одна тоесть от 1 до 9 а после знака ':' максимум три минимум одна .


smile

Автор: Alexeis 18.1.2006, 18:35
Код

function mysort(List: TStringList; Index1, Index2: Integer): Integer;
var
  i1, i2 : integer;
  s1, s2 : ansistring;
Begin
  s1 := List.Strings[Index1];
  s2 := List.Strings[Index2];
  if s1[1] > s2[1]
  then
    result := 1
  else
    if s1[1] < s2[1]
    then
      result := -1
    else
      Begin
        delete(s1,1,2);
        delete(s2,1,2);
        i1 := strtoint(s1);
        i2 := strtoint(s2);
        if i1 > i2
        then
          result := 1
        else
         if i1 < i2
         then
           result := -1
         else
           result := 0;
      end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var    
  sl: TStringList;    
begin    
  sl:=TStringList.Create;    
  sl.Assign(Memo1.Lines);    
  sl.CustomSort(mysort);
  Memo1.Lines.Assign(sl);
  sl.Free;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)