:: Архив конференции по VFP до 2005 года
работа с КЛАДР
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ом сделать?
Ratings: 0 negative/0 positive
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-й версии пара функций - одна возвращает кол-во слов, через указанный разделитель, а другая - слово по его номеру, хотя можно такую функцию легко написать самому.
Ratings: 0 negative/0 positive


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 5 (Гостей: 5)

© 2000-2024 Fox Club 
Яндекс.Метрика