Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Сортировка столбцов в StringGrid 2

Delphi , Синтаксис , Сортировка

Сортировка столбцов в StringGrid 2

Автор: http://www.sources.ru

type
  TStringGridExSortType = (srtAlpha, srtInteger, srtDouble);

procedure GridSort(SG: TStringGrid; ByColNumber, FromRow, ToRow: integer;
  SortType: TStringGridExSortType = srtAlpha);
var
  Temp: TStringList;

  function SortStr(Line: string): string;
  var
    RetVar: string;
  begin
    case SortType of
      srtAlpha: Retvar := Line;
      srtInteger: Retvar := FormatFloat('000000000', StrToIntDef(trim(Line),
        0));
      srtDouble:
        try
          Retvar := FormatFloat('000000000.000000', StrToFloat(trim(Line)));
        except
          RetVar := '0.00';
        end;
    end;

    Result := RetVar;
  end;

  // Рекурсивный QuickSort
  procedure QuickSort(Lo, Hi: integer; CC: TStrings);

    procedure Sort(l, r: integer);
    var
      i, j: integer;
      x: string;
    begin
      i := l;
      j := r;
      x := SortStr(CC[(l + r) div 2]);
      repeat
        while SortStr(CC[i]) < x do
          inc(i);
        while x < SortStr(CC[j]) do
          dec(j);
        if i <= j then
        begin
          Temp.Assign(SG.Rows[j]); // Меняем местами 2 строки
          SG.Rows[j].Assign(SG.Rows[i]);
          SG.Rows[i].Assign(Temp);
          inc(i);
          dec(j);
        end;
      until i > j;
      if l < j then
        sort(l, j);
      if i < r then
        sort(i, r);
    end;

  begin {quicksort}
    ;
    Sort(Lo, Hi);
  end;

begin
  Temp := TStringList.Create;
  QuickSort(FromRow, ToRow, SG.Cols[ByColNumber]);
  Temp.Free;
end;

Вот перевод кода на русский язык:

Enums и Процедуры Первая часть определяет энум TStringGridExSortType с тремя значениями: srtAlpha, srtInteger и srtDouble. Эти значения представляют различные типы сортировки.

Процедура GridSort принимает пять параметров: * SG: компонент TStringGrid, который нужно отсортировать. * ByColNumber: номер столбца для сортировки. * FromRow и ToRow: диапазон строк для сортировки (включительно). * SortType: необязательный параметр, указывающий тип сортировки, по умолчанию равен srtAlpha.

Помощники Функция SortStr принимает строку в качестве входного параметра и возвращает отсортированную версию этой строки в соответствии с указанным SortType. Она использует различные техники для каждого типа сортировки: * srtAlpha: возвращает оригинальную строку. * srtInteger: конвертирует строку в целое число, форматирует его с leading zeros и возвращает результат. * srtDouble: пытается конвертировать строку в вещественное число, форматирует его с десятичными знаками и возвращает результат. Если конвертация не succeeds, она возвращает '0.00'.

Implementation QuickSort Процедура QuickSort - рекурсивное реализация алгоритма QuickSort. Она принимает три параметра: * Lo: начальный индекс (включительно). * Hi: конечный индекс (исключительно). * CC: TStringList, содержащий данные столбца для сортировки.

Функция Sort - вспомогательная функция, рекурсивно сортирующая подмассив между Lo и Hi. Она использует следующие шаги: 1. Выбирает пивотный элемент из середины массива. 2. Разделяет массив на две части: элементы меньше пивота и элементы больше или равные пивоту. 3. Рекурсивно сортирует левую и правую подчасти. 4. Повторяет, пока не будет отсортирован весь массив.

Основной код Основной код создает объект TStringList Temp и вызывает процедуру QuickSort с указанным диапазоном строк, номером столбца и типом сортировки. Затем он освобождает объект Temp. В целом, этот код предоставляет гибкий способ сортировки столбцов в компоненте TStringGrid с помощью различных алгоритмов и критериев сортировки.

В статье представлен код на Delphi, который обеспечивает сортировку столбцов в StringGrid 2 методом рекурсивного QuickSort.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сортировка ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-12 15:36:34/0.0038800239562988/0