Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сортировка таблици


devidart ©   (2009-04-22 16:26:00) 

Все привет!
Подскажите как лучше сделать:

Есть такстовый файл - результат экспорта из Excel, фактически - матрица.
На форме есть грид.
Нужно заполнить этот грид строками из файла, но в правильной сортировке: сначала цифры по возрастанию, потом буквы по алфавиту и т.д.
Так же, если значения в первом столбще совпадают, то строки должны быть отсортированы по второму столбцу и т.д.

Писать вручную сортировку - как-то не айс, может кто подскажет класс, с помощью которого можно это легко провернуть?

Пробовал стринглистом, но он неправильно сортирует по цифрам, например 10 у меня выше, чем 3.

Пробовал в дельфях запихать данные обратно в Excel и провести сортировку, но опять же непонятно, как сделать сортировку по второму, третьему и т.д. столбцам.

На VBA это выглядело так:

Range("A1:C18").Select
   ActiveWorkbook.Worksheets("Ëèñò1").Sort.SortFields.Clear
   ActiveWorkbook.Worksheets("Ëèñò1").Sort.SortFields.Add Key:=Range("A1:A18"), _
       SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   ActiveWorkbook.Worksheets("Ëèñò1").Sort.SortFields.Add Key:=Range("B1:B18"), _
       SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   ActiveWorkbook.Worksheets("Ëèñò1").Sort.SortFields.Add Key:=Range("C1:C18"), _
       SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   With ActiveWorkbook.Worksheets("Ëèñò1").Sort
       .SetRange Range("A1:C18")
       .Header = xlGuess
       .MatchCase = False
       .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
       .Apply
   End With


Но в дельфях не знаю, как добавлять уровни сортировки.

А вообще, хотелось бы это сделать без использования Excel - это очень крайний вариант.

Заранее спасибо!


Anatoly Podgoretsky   (2009-04-23 08:41:00) [1]

10 это не цифра, а число или строка.
Числа можно численно сортировать, но только это если это числа, а не изображение чисел.


Германн   (2009-04-23 00:22:00) [2]


> devidart   (22.04.09 21:56) [7]
>
> да, лучше бы вообще не отвечал...

Дождёшься, что и вправду перестанет отвечать. А тогда, вполне вероятно, тебе же будет плохо.


turbouser   (2009-04-22 23:43:00) [3]


> devidart   (22.04.09 22:32) [10]

clientdataset (dxmemdata, kbmmemtable, etc.) + csv парсер или готовый csvdataset какой-нибудь, таких навалом, в jedi например есть такой..


devidart   (2009-04-22 22:32:00) [4]


> А что, отсортировать данные средствами Excel и экспортировать
> из него в файл уже отсортированные должным образом данные
> некошерно ?
>
> И за каким лешим вообще нужен этот файл, если существует
> возможнось непосредственной связи активного Excel-листа
> и дельфийского грида ?


Ну вот так надо сделать...


> откуда в текстовом файле столбцы ?

Столбцами называем колонки текста, разделенные символом табуляции


Игорь Шевченко   (2009-04-22 22:28:00) [5]


> Нужно заполнить этот грид строками из файла, но в правильной
> сортировке: сначала цифры по возрастанию, потом буквы по
> алфавиту и т.д.
> Так же, если значения в первом столбще совпадают, то строки
> должны быть отсортированы по второму столбцу и т.д.


откуда в текстовом файле столбцы ?


Сергей М.   (2009-04-22 22:25:00) [6]


> Есть такстовый файл - результат экспорта из Excel


А что, отсортировать данные средствами Excel и экспортировать из него в файл ужеотсортированные должным образом данные некошерно ?

И за каким лешим вообще нужен этот файл, если существует возможнось непосредственной связи активного Excel-листа и дельфийского грида ?


devidart   (2009-04-22 21:56:00) [7]

да, лучше бы вообще не отвечал...
Если сложно написать, или раздражает, что сам не могу найти - обходи тему стороной и делов-то.


sniknik   (2009-04-22 20:12:00) [8]

и вообще вопрос про то как "запихать" второстепенный, первым был с помощью какого класса легко провернуть сортировку, ну так это самый простой.
и да я не дописал, не обратил внимания на
>  как сделать сортировку по второму, третьему и т.д.
расширю пример ->
ADODataSet1.sort:= 'поле1, поле2, поле3, полетд';


sniknik   (2009-04-22 20:04:00) [9]

> Блин. Причем тут дата сет вообще?
при том, что он предназначен для принятия и обработки данных.

> Как в него данные запихать из файла??
учитесь и обрящете... не проблема прочитать из экселевского файла, или вообще разнотипных баз, думаешь с простым текстовиком не справится? жестоко ошибаешься.

> У него ведь обязательные поля  DataSource И COnnection
кто сказал? нет они не обязательны, они чисто для удобства получения данных из разных источников.

> К чему коннектиться?? Откуда сорситься???
а вот это оставим для изучения из книг. найди сам, для того чего ты там хочешь прочитать, для екселя можешь воспользоваться данной мной ранее "наколкой".


devidart   (2009-04-22 19:27:00) [10]

Блин. Причем тут дата сет вообще?
Как в него данные запихать из файла??
У него ведь обязательные поля  DataSource И COnnection
К чему коннектиться?? Откуда сорситься???


sniknik   (2009-04-22 18:59:00) [11]

подробнее, это как раз тот класс по обработке данных с которым  "это легко провернуть".
чего неясного?
фактически весь код сортировки по полю  будет ADODataSet1.sort:= 'поле1';

есть и другие возможности, например подключение (через коннект) к разным провайдерам данных, например jet, с помощью которого можно загрузить данные прямо из Excel без предварительных экспортов. ну и грид (если это dbгрид) сам заполняется строками из него простым их соединением посредством датасоурса.

ну и т.д. и т.д. хватит подробностей, не стоит отбивать хлеб у писателей книг и хелпов.


devidart   (2009-04-22 17:41:00) [12]

А можно поподробнее?


sniknik   (2009-04-22 17:31:00) [13]

> класс, с помощью которого можно это легко провернуть?
TADODataSet


Наверх

Титульная страница Поиск, карта сайта Написать письмо