Сортировка по строке, состоящей из букв и чисел

1. Оле-Олеся 6 09.10.08 06:38 Сейчас в теме
Есть таблица с колонками "Улица", "Дом", "Квартира". Нужно все это дело отсортировать по возрастанию. Все колонки имеют тип Строка, поэтому перед сортировкой привожу поля "Дом" и "Квартира" к типу Число. Проблема в том, что колонки "Дом" и "Квартира" могут содержать значения типа "14а", т.е. в число не перевести.... Вариант строковой сортировки (1, 14, 14а, 2, 25...) совершенно не устраивает. Надо чтобы было (1, 2, 14, 14а, 25...).
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Vitek 09.10.08 09:01 Сейчас в теме
Почему это в число не перевести?
Дублируй колонку, преобразуй в числовой формат, сортируй.
3. Шёпот теней 1782 09.10.08 10:22 Сейчас в теме
Задача:
Отсортировать текст из слов состоящих из цифр по чиловому типу (не по алфавиту).

Ответ (один из возможных):
1. по количеству букв-цифр в слове.
2. по коду CHR буквы-цифры.
3. по букве в слове.

П.С.1. проще как советует Lomok
П.С.2. в своё время мне нужно было вытаскивать дату из текста.. посмотри если интересно на моей страничке... не то конечно но что общее есть... хотя советов почти не было ... <http://infostart.ru/profile/15616/projects/1626/>;
4. Оле-Олеся 6 10.10.08 06:00 Сейчас в теме
Lomok, при преобразовании в числовой формат у меня вылетает ошибка на значениях типа "14а".

В принципе, проблему эту я обошла, разделением номера дома и квартиры на две колонки:

//Функция разбивает строку вида "ЧисловыеСимволыПрочиеСимоволы" на две части "ЧисловыеСимволы" и "ПрочиеСимволы"
Функция ОтделениеЧисловойЧастиОтПрочего(СтрокаПроверки)
Для а = 1 По СтрДлина(СтрокаПроверки) Цикл
КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1));
Если НЕ(КодСимвола >= 48 И КодСимвола <= 57) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Новый Структура ("ЧисловаяЧ, ПрочаяЧ", Лев(СтрокаПроверки, а-1), Прав(СтрокаПроверки, СтрДлина(СтрокаПроверки)-(а-1)));
КонецФункции

Пока Выборка.Следующий() Цикл
Стр = ТабРезультатаЗапроса.Добавить();
НомерДома = ОтделениеЧисловойЧастиОтПрочего(СокрЛП(Выборка.Дом));
Стр.Дом = ?(НомерДома.ЧисловаяЧ="",0,Число(НомерДома.ЧисловаяЧ));
Стр.БуковкаДома = НомерДома.ПрочаяЧ;
НомерКвартиры = ОтделениеЧисловойЧастиОтПрочего(СокрЛП(Выборка.Квартира));
Стр.Квартира = ?(НомерКвартиры.ЧисловаяЧ="",0,Число(НомерКвартиры.ЧисловаяЧ));
Стр.БуковкаКвартиры = НомерКвартиры.ПрочаяЧ;
КонецЦикла;

ТабРезультатаЗапроса.Сортировать("Дом, БуковкаДома, Квартира, БуковкаКвартиры");



Просто думала, что есть более простое решение... И более универсальное, т.к. вторая половина номера сортируется как строка, несмотря на возможное наличие чисел.

Шёпот теней, "по коду CHR буквы-цифры" - заинтересовал этот вариант, только не могу сообразить как его осуществить. Куда коды символов записывать и как их сортировать? В массив?


5. Vitek 10.10.08 08:04 Сейчас в теме
>Куда коды символов записывать и как их сортировать? В массив?
В ту же самую тз, в доп колонку.

>Lomok, при преобразовании в числовой формат у меня вылетает ошибка на значениях типа "14а".
Ну еще бы :)

>В принципе, проблему эту я обошла, разделением номера дома и квартиры на две колонки
Все правильно, цифры отдельно, буквы отдельно.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот