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

Сортировка TStringList по нескольким колонкам в Delphi

Delphi , Базы данных , Сортировка и Фильтр

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

Проблема

У вас есть TStringList, содержащий много строк, и вам нужно отсортировать его по определенным значениям в зависимости от колонки, в которой они находятся. Например:

adsfoiadjfoaidjfoaidfjo <b>BABABA</b> asdfsd <b>0101010</b>
skfjlgjljkglsdkgjasaasd <b>BABABA</b> dafdff <b>0419299</b>
asdaksdjakbkj3409560295 <b>BABABA</b> kjfhan <b>0923858</b>
dsdddsdasdadasdasdasdgg <b>BABABA</b> dafdff <b>0419299</b>
45645654654654654654666 <b>BABABA</b> dafdff <b>0489421</b>
dsdddsdasdadasdasdasdgg <b>CACACA</b> dafdff <b>0419299</b>

Вы хотите отсортировать строки сначала по значению в 25-30-й колонке (BABABA), а затем, если есть совпадение, по значению в 39-45-й колонке (номер). Если номера не совпадают, сортировка должна происходить по значению в 25-30-й колонке, а если и это не поможет, то любым другим способом.

Решение

Для решения этой проблемы вы можете использовать метод CustomSort компонента TStringList. Этот метод позволяет сортировать список по пользовательскому сравнению, которое вы определяете. В нашем случае мы создадим функцию сравнения, которая будет сравнивать строки по заданным колонкам.

Сначала определим функцию, извлекающую подстроку, используемую для сравнения:

function GetOrderingSubString(const s: string): string;
begin
  Assert(Length(s)=45);
  Result := Copy(s, 25, 6) + Copy(s, 39, 7);
end;

Теперь создадим функцию сравнения, которая будет использовать нашу функцию извлечения подстроки:

function CompareItems(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := CompareText(GetOrderingSubString(List[Index1]), GetOrderingSubString(List[Index2]));
end;

Наконец, воспользуемся методом CustomSort, передав ему нашу функцию сравнения:

List.CustomSort(CompareItems);

После выполнения этого кода TStringList будет отсортирован в соответствии с заданными правилами.

Альтернативный ответ

Если вам нужно отсортировать TStringList по нескольким колонкам, но с другими правилами, вы можете изменить функцию сравнения, чтобы она соответствовала вашим требованиям. Например, если вы хотите сначала отсортировать по 39-45-й колонке, а затем по 25-30-й колонке, просто поменяйте местами вызовы Copy в функции GetOrderingSubString.

Подтвержденный ответ

В вашем случае сначала нужно отсортировать по 25-30-й колонке, а затем, если есть совпадение, по 39-45-й колонке. Используйте метод CustomSort и функцию сравнения, как описано выше, чтобы отсортировать TStringList по заданным правилам.

Создано по материалам из источника по ссылке.

Нужно отсортировать TStringList по нескольким колонкам в Delphi, используя метод CustomSort и функцию сравнения, чтобы сначала отсортировать по 25-30-й колонке, а затем, если есть совпадение, по 39-45-й колонке.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 09:10:15/0.0057990550994873/0