Просмотр полной версии : Структура КЛАДР
Ктонить разбирался с КЛАДР?
Необходимо реализовать доступ к классификатору адресов. Т.е. чтобы можно было выбрать Регион затем город затем улицу затем дом.
Щас полез разбираться - дремучий лес :(
Нашел несколько статей - читаю.
Пока я в ужасе! :)
Вот. Собственно Хелп :)
Немного разобрался..
с кодами регионов, городов и населенных пунктов..
хрень та еще..
осталось еще разобраться с номерами домов..
т.к. они записаны одной строкой для каждой улицы..
вроде 1,4,7,Ч(8-32),Н(9-33),32\18, 40А
ну и в такомже духе..
я понимаю что Ч(8-32) это четные номера домов от 8 до 32
но как мне выполнить проверку что выбранный номер дома
входит в этот диапазон??
да я разобью эту строку в массив
и буду работать только с элементом Ч(8-32)
и я знаю что пользователь ввел номер дома 30
как мне узнать что этот номер входит в этот диапазон,
а если ввел 31 то не входит...
:(
Хелп плис
KEVin V.
28.05.2008, 08:14
С радостью бы помог, но понятия не имею о чем ты ^_^
Если номер дома на 2 без остатка делится, то в Ч. Или придумай более изящное описание чётности. ;)
Это не я придумал, это так есть в базе КЛАДР
"Классификатор адресов" он используется в налоговой и бухгалтерской
отчетности..
Вот с этой базой я и разбираюсь..
с Регионами, городами, населенными пунктами, улицами в них
я разобрался..
осталось только побороть номера домов..
вот я и говорю.. дома для улицы записаны в базе одной строкой
например вот так вот:
6,10,11,13,17,Ч(14-22),Н(23-35)
или вот так вот:
10/2,5/13,9/20,19/22,20/17,34/15,Ч(4-8)
т.е. такая вот строчка для каждой улицы..
возможно для каждой улицы есть несколько таких строчек.. еще не смотрел..
вот.. мне вот этоу вот строку:
10/2,5/13,9/20,19/22,20/17,34/15,Ч(4-8)
нужно както разобрать на отдельные дома чтобы можно было както
ими оперировать..
Ни чего не понятно. Изложи хоть немного: что за инструменты в твоём распоряжении, что можно с этой базой делать и чего нельзя? Тебе только читать базу, или писать в неё (в этом же формате?)? Можно её преобразовать?
Так. В моем распоряжении:
IIS 6.0 ASP.NET (C#) и ASP (JavaScript)
т.е. или C# или Javascript
База dbf не помню какого формата.. не важно
я с ней цепляюсь нормально и нормально читаю из нее данные
И в моих планах перенести данные из dbf в MS SQL Server
но убрать лишние и расставить свои индексы и ключи...
Все зашибись кроме одного:
мне нужно из строчки:
6,10,11,13,17,Ч(14-22),Н(23-35)
получить строчку:
6,10,11,13,17,14,16,18,20,22,23,25,27,29,31,33,35
Т.е.
Ч(14-22) == 14,16,18,20,22
Н(23-35) == 23,25,27,29,31,33,35
причем диапазон может быть любой (за исключением отрицательных чисел)
Т.е. нужно регулярное выражение или просто алгоритм\функция
чтобы выполнить это преобразование.
Не упирайся ты в чётность/нечётность.
Если при чтении натыкаешься на '(' записывай следующие за скобкой цифры в переменую1, пока не прочитаешь '-' ; записывай следующие за минусом цифры в переменную2, пока не прочитаешь ')' ; затем в цикле пока переменная1 не станет равна переменной2 прибавляй к переменной1 двойку и пиши в итоговую строку.
shurutov
28.05.2008, 20:45
lirien, ты мене извини, но кто ты по специальности?! Ну-ка быстро нарисовал конечный автомат, на базе которого будешь парсить строку адресов!!!
ЗЫ. После нарисования автомата все вопросы отпадут сами собой.
ЗЫЫ. Перлом и регулярными выражениями эта задача решается в одну-две строки, тупо лень думать даже...
спасибо :) но моя специальность не связана с программированием
или с какой бы то нибыло техникой вообще
хоть я и знаю 4 языка программирования.. и активно пользуюсь ими..
тама ещё какие нить хитровыебанные обозначения кучи домов, кроме ч() и н() есть ??
Все.. проблему решил..
Кинул сюда на обсуждение так как была куча других задач
Решилось все одной элементарной строчкой регулярных выражений и небольшим циклом формирую из Ч(30-36) строку 30,32,34,36 и добавляю к общей строке номеров.. в дальнейшем конкретный номер можно будет извлечь из строки методом split
Всем большое спасибо!
Пользователь вводит дом, начинаешь по строке идти - встретишь простое число - проверка на равенство. Встречаем составное - вычленяем 1ое и последнее и методом прибавления 2х к первому числу сравниваешь со всей последовательностью. В такой регексп должен вписаться составной номер дома [н|ч]\([0-9]{1,4}\-[0-9]{1,4}\).
Сравнивать в цикле с последовательностью по моему быстрее, чем сравнивать с диапазоном и проверять чётность.
добавляю к общей строке номеров
а я дурак думал, что данные изменять низя и составление строчек на лету - расход памяти ... эхххх, regexp то покажи хоть
var reg_num=/^(?:Ч|Н)\((\d+)-(\d+)\)$/;
var check_num=/^(?:Ч|Н)\(\d+-\d+\)$/;
Мне тут понимаешь ли расход памяти не важен..
эта операция будет производиться не чаще раза в месяц..
а может и не чаще квартала или полугода..
просто перенос базы кладр по Кемерово из dbf в MSQ SQL
а дальше уже только запросы чтения и т.д. и т.п. работа с базой
Sir Arthur
29.05.2008, 16:46
эм, я возможно глупость ляпну.
Проверить на четность/нечетность div (mod) можно ведь?
Вить. Там не только чётность, но и диапазон. Если расход памяти не важен - можно и дивом, а потом на диапазон.
Но при обработке данных на лету в условиях экономии (ну или хотябы в целях оптимизации) лучше распаковывать по мере надобности.
ИМХО
Ну насчет определения четности нечетности не беспокойтесь :)
тут большое спасибо Лексусу :)
все просто.. диапазон от 30 до 38 только четные..
прибавляем двойку в цикле
диапазон от 31 до 39 - только нечетные
прибавляем двойку в цикле
и все ок :)
а проверку на присутствие в перечне номеров домов
можно проводить также - элементарным регулярным выражением..
vBulletin® v3.8.0, Copyright ©2000-2012, Jelsoft Enterprises Ltd. Перевод: zCarot