Форум » [x]Harbour » Сортировка по алфавиту ??? » Ответить

Сортировка по алфавиту ???

Andrey: Всем привет. Постановка задачи такая: Есть справочник-улиц (street.dbf) типа: Kstreet - Street 1 - Махалина ул. 2 - Федорова ул. ..... 990 - Алтуфьевское шоссе ..... В основной базе "списка адресов" (допустим dogovor.dbf) записывается код улицы Kstreet. При выборке из базы (использую условный индекс) выводиться нужный мне список. Задаю сортировку по коду улицы (Kstreet). Получаю отсортированный список не по алфавиту улиц. А как решить вопрос с сортировкой по алфавиту базы (таблицы) "списка адресов" ? Чтобы список показывался по алфавиту ???

Ответов - 57, стр: 1 2 3 All

Andrey: Петр пишет: Предложение WHILE не сохраняется в индексном файле Спасибо....

Andrey: Привет всем ! Столкнулся с такой проблемой - в базе есть поле НОМЕР_ДОМА ( С 5,0 ) Допустим список домов "1", "2", "3", "17в", "15", "11" и т.д. При сортировке получаю ерунду 1 11 15 17в 2 3 Как бы правильно отсортировать это поле, чтобы дома правильно стояли ? Можно конечно и через 2 поля (сделать разборку поля НОМЕР_ДОМА) - но не желательно...

Dima: попробуй PADL(твой ключ,длина,"0")


Andrey: Dima пишет: попробуй PADL(твой ключ,длина,"0") А как быть с 17в ? У меня таких домов очень много 58а, 58б, 19а и т.д. .....

Dima: Andrey пишет: А как быть с 17в ? А куда он встал при такой сортировке с padl ?

nick_mi: Я думаю, где-то в 3-х значные номера домов. Очевидно здесь в лоб PADL нельзя использовать. Необходим анализ, если последний символ номера буква - PADL, иначе к номеру в конце добавить пробел, тогда сортировка будет правильная

vvv: index on str(val(dom))+dom красиво отрабатывает, в том числе и штучки типа 10/1, 10-1.

petr707: ..... index on fdom() to test .... Function fdom() Static cifr:='0123456789' return PADL(val(charonly(cifr,dom)),5,'0')+charrem(cifr,dom)

Andrey: vvv пишет: index on str(val(dom))+dom красиво отрабатывает, в том числе и штучки типа 10/1, 10-1. Спасибо БОЛЬШОЕ ! Это самое изящное решение проблемы !

Andrey: vvv пишет: index on str(val(dom))+dom красиво отрабатывает, в том числе и штучки типа 10/1, 10-1. Что-то не правильно сортирует ! 9 11 12 .... 16Б ... 89А .... 97 97К 100 100 100 102Б 102Б 102Б 16 13 13 19/2 19/2 73 11 9Б 11 Как нужно делать тогда ?

Andrey: Пардон, извиняюсь... Все правильно сортирует, там еще улица в сортировке присутствует !

Andrey: Pasha пишет: Вместо KSTREET поставить STREET->STREET и сделать set relation, как я написал От set relation в МиниГуи пришлось отказаться. Поставил спец.функцию показа - Say_Dbf( (cAlias)->KSTREET, "STREET", "STREET" ) Как теперь сделать сортировку столбца/колонки по улице в алфавитном порядке ?

Dima: Andrey пишет: Как теперь сделать сортировку столбца/колонки по улице в алфавитном порядке ? По индексу однако или юзать что то свое в плане set relation , и да МиниГуи тут не при чем Andrey пишет: Поставил спец.функцию показа - Say_Dbf Телепаты уже в пути

Andrey: Dima пишет: юзать что то свое в плане set relation , и да МиниГуи тут не при чем МиниГуи здесь ещё как причем ! Я уже писал об этом: при использовании set relation в Tsbrowse неправильно отображаются записи, при использовании(показе) ДВУХ Tsbrowse. Если убрать set relation то всё отлично. Dima пишет: Телепаты уже в пути Постановка задачи такая: Есть справочник-улиц (street.dbf) типа: Kstreet - Street 1 - Махалина ул. 2 - Федорова ул. ..... 990 - Алтуфьевское шоссе ..... В основной базе "списка адресов" (допустим TEST.dbf) записывается код улицы Kstreet. Создаю индекс по коду улицы (Kstreet) в основной базе. Получаю отсортированный список не по алфавиту улиц, а по коду. Как решить вопрос с сортировкой по алфавиту базы (таблицы) "списка адресов", чтобы список показывался по алфавиту ???

Haz: Andrey пишет: МиниГуи здесь ещё как причем Андрей, минигуи, а именно TSbrows отражает в ячейке то что вернет блок выборки. Тот что по умолчанию у меня терял алиас ( мож сейчас все нормально, давно использую свой) Но то что минигуи не может влиять на работу драйвера баз данных и на его установки по set relation это точно. Так что проблема не в минигуи, а в том что от него просят. Уверен если скормить минигуи свой правильный блок то с реляцией проблем не возникнет По второму вопросу- делай локальный индекс в выражение которого по коду возвращает название улицы, или загоняй массив что нужно и сортируй как хочется или используй SQL и получая склейку через JOIN и ORDER BY показывай уже отсортированно. Самый простой - это по массиву или mem: базе, заполнил проиндексировал и показывай.

Vlad04: Andrey Я делаю так База1 и БАЗА2 СОЕДИнены set relation . Далее создаю индекс, который не должен автоматически открываться ( в другое место его помещаю) В индексное выражение включаю поля Базы2. INDEX ON UPPER(Fam+IM+Ot+dTOS(kLIENT->bIRTH_DATE) ) Tag "ONE" TO (Par1+"TempIndex.cdx") Поля Базы2 показываю в Бровсе1 совместно с полями Базы1. Двух Tsbrowse здесь не должно быть всё Ок

Andrey: Vlad04 пишет: Я делаю так База1 и БАЗА2 СОЕДИнены set relation . НЕ МОГУ делать через set relation !!! Уже писал об этом - глючет показ Tsbrowse в МиниГуи (как исправить не знаю). Нужно найти решение без set relation. Можно сделать вариант с пере открытием базы улиц, но мне это не подходит. Я все базы открываю при запуске задачи.

Vlad04: а пример небольшой ?

Andrey: Vlad04 пишет: а пример небольшой ? Вот пример - https://cloud.mail.ru/public/LrPi/piq8pzAWS Создание индекса делать в util_Use.prg строка 32

Haz: Andrey пишет: Вот пример Ответил в почту



полная версия страницы