Найти цифру

  • Автор темы vbs
  • Дата начала
V

vbs

Ну как это не видно...
В любой таблице символов, если мне не изменяет память, 0 = 30, 1 = 31, ... 9 = 39.
В 1С есть КодСимв().
Если (КодСимв() > 29) и (КодСимв() < 40) Тогда
//Цифра
КонецЕсли;
Так это не что иное, как
посимвольный перебор строки, сравнивая код символа на принадлежность диапазону, в котором лежат коды цифр
 
P

puh14

Интересно - а можно эти десять тыр строк загнать в курсор, а потом к нему применить select с PATINDEX('%[0-9]%',,) ?

Вот как внешние данные в курсор загнать - энто я не делал.
 
V

vitfil

А почему ты думаешь, что они внешние?
Скорее всего, лежат себе тихонечко где-нить в базе...
Вот тока не совсем понятно, на кой курсор для этих целей лепить? Можно обычную темповую табличку.
 
P

puh14

А почему ты думаешь, что они внешние?
Скорее всего, лежат себе тихонечко где-нить в базе...
Вот тока не совсем понятно, на кой курсор для этих целей лепить? Можно обычную темповую табличку.

Я с сиквелом ограниченно работал через фокспрошную длл-ку. практические знания весьма узкие, потому про курсор и написал. Если можно через табличку - то ещё лучше. Интересно было-бы увидеть пример.
 
V

vbs

А почему ты думаешь, что они внешние?
Скорее всего, лежат себе тихонечко где-нить в базе...
Задача, собственно, в том, что требуется разобрать некий реквизит справочника и сформировать из него несколько других реквизитов
 
P

puh14

Задача, собственно, в том, что требуется разобрать некий реквизит справочника и сформировать из него несколько других реквизитов
То есть каждая цифра - это а-ля разделитель? и сколько в результате реквизитов получится? Одинаково или как повезет?
 
V

vitfil

Задача, собственно, в том, что требуется разобрать некий реквизит справочника и сформировать из него несколько других реквизитов
Структуру справочника дай - напишу готовый пример.

Если можно через табличку - то ещё лучше. Интересно было-бы увидеть пример.
Пример чего?
Можно, кстати, сделать закрепленную ветку типа FAQ по прямым запросам, если хотите. Только для конкретных примеров. Давайте примеры, будем писать запросы и куски кода.
 
V

vbs

Задача-то, по сути, простая.
Реквизит для разборки выглядит примерно так :
911-91-91 Иванов Петр Сидорович Ул.Ленина,д.99 (разделитель - пробел)
Но в отдельных случаях так :
хххххххххх911-91-91 Иванов Петр Сидорович Ул.Ленина,д.99
хххххххххх - совершенно левая информация (произвольный текст)
Из этого реквизита надо получить : телефон, ФИО и адрес, а левые данные просто отсечь
 
K

KiR

а разве в совершенно левой информации не могут присутсовать цифры?
 
V

vitfil

Допустим, справочник
Сотрудники. Нужный реквизит - ДанныеОСотруднике.
Запрос будет таким:
Код:
update Спр
set $Спр.ДанныеОСотруднике = 
right(ltrim(rtrim($Спр1.ДанныеОСотруднике)),len(ltrim(rtrim($Спр1.ДанныеОСотруднике)))+1-PATINDEX('%[0-9]%',ltrim(rtrim($Спр1.ДанныеОСотруднике))))
from $Справочник.Сотрудники as Спр
left join $Справочник.Сотрудники as Спр1 on Спр1.id = Спр.id

У меня на ноуте в базе в справочнике находится порядка 30 тысяч записей. Обновление прошло за секунды (меньше 10 секунд).
 
V

vbs

update Спрset $Спр.ДанныеОСотруднике = right(ltrim(rtrim($Спр1.ДанныеОСотруднике)),len(ltrim(rtrim($Спр1.ДанныеОСотруднике)))+1-PATINDEX('%[0-9]%',ltrim(rtrim($Спр1.ДанныеОСотруднике))))from $Справочник.Сотрудники as Спрleft join $Справочник.Сотрудники as Спр1 on Спр1.id = Спр.id
И что, такой текст прямо в обработку вставить ? И сработает ?
 
V

vitfil

В обработку вставляем следующее:
Код:
ЗагрузитьВнешнююКомпоненту("1cpp.dll");
RecordSet = СоздатьОбъект("ODBCRecordSet");
RecordSet.РежимRPC(1); //чтобы запрос выполнялся в виде хранимой на сервере процедуры - быстрее будет
ТекстЗапроса = "..." //приведен выше
RecordSet.ВыполнитьИнструкцию(ТекстЗапроса);
Естесственно, желательно бы сделать копию базы перед выполнением обработки.
В результате в нужном реквизите будет записано все, начиная с первой цифры, а все, что до первой цифры будет отброшено.
 
V

vbs

А где взять
1cpp.dll ?

vitfil Спасибо, с проблемой-то я уже справился, но новый метод попробую обязательно, думаю, что-нибудь подобное
вполне может встретиться в будущем

Естесственно, желательно бы сделать копию базы перед выполнением обработки.
:)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!