работа с КЛАДР | |
---|---|
Race Автор Сообщений: 253 Дата регистрации: 26.12.2004 |
Пообщался тут с ГНИВЦ ФНС по поводу ихней программки
2-НДФЛ, почему у них почтоиндекс не ставится автоматом при вводе номера дома. Нет ли у кого примера работы с КЛАДР, позволяющего по введенному номеру дома выцарапывать почтовый индекс из таблички: -------------------------------------------------------- номера домов, скажем, на улице Ленина : Индекс : NAME : INDEX : -------------------------------------------------------- 42,Ч(30-36),Н(33-45) : 697122 : -------------------------------------------------------- Ч(38-40),Ч(44-104),Ч(108-998),Н(47-101) : 697124 : -------------------------------------------------------- Ч(2-222),Н(1-173),Н(235-243) : 697208 : -------------------------------------------------------- 40,41,42,Ч(30-36),Н(33-45) : 697211 : -------------------------------------------------------- Может просто кто-нибудь захочет поупражнять мозги. Может это можно вообще одним selectом сделать? |
Re: работа с КЛАДР | |
---|---|
matod Сообщений: 3062 Откуда: Иркутск Дата регистрации: 31.10.2001 |
А что сложного? Пишем функцию, которая возвращает .t. если указанный номер принадлежит множеству, примерно по следующей схеме:
1. организуем цикл по частям поля Name, разделенным запятыми, если строка кончилась - возвращаем .f. 2. Проверяем 1-й символ части слова, если это цифра, то переходим к п.3 иначе п.4 3. Переводим строку в число, сравниваем с введенным, если совпало - возвращаем .t. иначе - к п.1. 4. Запоминаем первую букву (Ч или Н - это четные и нечетные). Проверяем, является ли введенный номер четным (нечетным) и если четность не совпадает с указываемой буквой, продолжаем просматривать строку с п.1 5. Разбираем оставшуюся часть строки: отбрасываем скобки, выделяем 1-е и 2-е число, разделенные символом -. Проверяем, попадает ли введенный номер в полученный диапазон. Если да, возвращаем .t. Ну, а дальше - хоть locate, хоть select с использованием этой функции... Насколько я помню, в поле name возможен вариант указания диапазона домов без различия Ч и Н. Тогда несложно добавить в алгоритм ветку для этого случая. Для реализации такого разбора есть масса функций в Foxe: at(), substr(), val(), isalpha(), isdigit() с 7-й версии пара функций - одна возвращает кол-во слов, через указанный разделитель, а другая - слово по его номеру, хотя можно такую функцию легко написать самому. |
© 2000-2024 Fox Club  |