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

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

Сортировка строкового поля как числового(D10/FoxPro/ADO) [dBase, FoxPro]


Страницы:   1 2

Erick ©   (2008-07-02 10:48:00) 

В таблице есть строковое поле TStringField, примерный список его значений следующий:
001
002
10
2
25A
112А
112Б
112B
30

Нужно отсортировать набор данных по этому полю, как числовому.
Т.е.чтобы было
001
002
2
10
25А
30
112А
112Б
112B
Как это можно сделать?
P.S. Все это нужно сделать только средствами Delphi.


Desdechado   (2008-07-03 15:19:00) [1]


> Какую ты "маску" придумал ?

Это ты придумал шаблон, а я всего лишь синоним к слову употребил...


MsGuns   (2008-07-03 14:25:00) [2]

>Desdechado ©   (03.07.08 10:47) [36]

Какую ты "маску" придумал ? Сравниваются строки и только


Anatoly Podgoretsky   (2008-07-03 12:13:00) [3]

> Desdechado  (03.07.2008 10:47:36)  [36]

Это попытка удаления гланд через заднее отверстие.


Desdechado   (2008-07-03 10:47:00) [4]


> Ничего не надо менять.

Ой, не кажи "гоп".
А если туда вколотят с дефисами/слэшами/пробелами и прочими знаками препинания, это ж какая маска нужна....


MsGuns   (2008-07-03 10:05:00) [5]

>Desdechado ©   (02.07.08 17:18) [29]
>А то появится какое-нибудь "ПомеЩение 1Б2" - и тогда шаблон резко менять надо.

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


MsGuns   (2008-07-02 22:39:00) [6]

>О каком сиквеле идет речь?

О диалекте SQL. Не все они позволяют разобрать строку или проверить содержит ли она только цифры


Johnmen   (2008-07-02 21:26:00) [7]


> Виталий Панасенко(дом)   (02.07.08 21:23) [32]
> приведи строковое к числовому и по нему отсортируйтипа select
>  id, cast(id as integer) FROM table order by 2


опять недосмотрел... (c) Виталий Панасенко(дом)


Виталий Панасенко(дом)   (2008-07-02 21:23:00) [8]

приведи строковое к числовому и по нему отсортируй
типа select  id, cast(id as integer) FROM table order by 2


Anatoly Podgoretsky   (2008-07-02 18:38:00) [9]


> Как получить шаблон - дело "техники". Можно в запросе (если
> сиквель позволяет), можно через доп.поле датасета (TClientDataSet)

О каком сиквеле идет речь?


zorik   (2008-07-02 17:51:00) [10]

В FB у меня нечто схожее реализовано с помощью UDF. Тригер срабатывает на добавление - изменение записи и в дополнительное поле вносит преобразованое шаблонированое значение, которое преобразуется в UDF


Desdechado   (2008-07-02 17:18:00) [11]


> Привести нативные значения полей к единому шаблону (формату)
> - строке

Это если оно получится. А то появится какое-нибудь "ПомеЩение 1Б2" - и тогда шаблон резко менять надо. А судя по постановке, данные не формализованы, юзеры долбят, что хотят.


MsGuns   (2008-07-02 16:56:00) [12]

Привести нативные значения полей к единому шаблону (формату) - строке
Например шаблон NNNNNNLLLL, где
 N - цифра и L - буква

Тогда получим такую картину

Нативные значения    Шаблон
 0001                        000001____
 1                              000001____
 234                          000234____
 25ПРСТ                   000025ПРСТ
 78А                          000078А___
 Б45                          999999Б45_

По шаблону и сортировать

Как получить шаблон - дело "техники". Можно в запросе (если сиквель позволяет), можно через доп.поле датасета (TClientDataSet)


Anatoly Podgoretsky   (2008-07-02 16:43:00) [13]

> Erick  (02.07.2008 16:27:23)  [23]

А что ИД нет?


Сергей М.   (2008-07-02 16:39:00) [14]


> Да хоть "пузырьком"


TStringList, если ты за него взялся, реализует QuickSort.

Тебе остается реализовать алгоритм сравнения.


Desdechado   (2008-07-02 16:36:00) [15]


> как мне как сохранить соответвствие между сзначениями этого
> и других полей?

Номера помещений у тебя уникальны? Если да, то соответствие уже есть. А если нет, то не имеет значения, какое из них первое, какое - второе. Главное, чтобы строки в результирующем CDS не повторялись.
Это, я думаю, ты сообразишь.


Erick   (2008-07-02 16:30:00) [16]


> Алгоритмы сортировки абстрактны, им по барабану что сортировать
> - хоть строки, хоть черта лысого. За работу с конкретными
> типами сортируемых этими алгоритмами данных отвечают другие
> алгоритмы - алгоритмы сравнения. Вот там как раз и важно
> содержимое твоих строк. Но о сравнении пока речь не идет
> - ты еще не определился с алгоритмом сортировки.

Да хоть "пузырьком", как разница какой алгоритм использовать. Мне нужно отсортировать по возрастанию номера помещений, которые храняться в текстовом поле.


Erick   (2008-07-02 16:27:00) [17]


> TStringList.CustomSort
> Туда подсовываешь свою функцию, которая для 2х значений
> скажет, какое больше. Собственно, я уже повторяюсь [3]

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


Сергей М.   (2008-07-02 16:21:00) [18]


> Erick   (02.07.08 15:51) [14]


Алгоритмы сортировки абстрактны, им по барабану что сортировать - хоть строки, хоть черта лысого. За работу с конкретными типами сортируемых этими алгоритмами данных отвечают другие алгоритмы - алгоритмы сравнения. Вот там как раз и важно содержимое твоих строк. Но о сравнении пока речь не идет - ты еще не определился с алгоритмом сортировки.


Johnmen   (2008-07-02 16:17:00) [19]

Насчет хреновости согласен
http://sql.ru/forum/actualthread.aspx?tid=571982


> Я же написал, что извращаться не хочется.

Ну я уже догадался, что писать программу ты не хочешь :))


Desdechado   (2008-07-02 16:14:00) [20]


> 002 и 2 -это должно быть одно и тоже, а 2 после 002 потому,
>  что она и в начальном наборе идет тоже после

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


Страницы:   1 2

Наверх

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