![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка таблици
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