Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2018, 01:57   #1
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию Парсинг кодов ОКТМО

вопрос из области кодирования информации
Есть справочник ОКТМО, можно взять http://www.gks.ru/metod/oktmo.html
Справочник имеет иерархическую структуру. На вход получаю последовательно строки, для каждой строки родитель записи был получен ранее:
37 000 000 Муниципальные образования Курганской области
37 600 000 Муниципальные районы Курганской области/
37 602 000 Альменевский муниципальный район
37 602 400 Сельские поселения Альменевского муниципального района/
37 602 442 - Шариповский сельсовет


Нужно для каждой записи найти родителя по иерархии, для каждой записи родитель идет раньше, чем сама запись, например
37 000 000 корень
37 600 000 родитель 37 000 000
37 602 000 родитель 37 600 000
37 602 400 родитель 37 602 000
37 602 442 родитель 37 602 400
Была идея у кода справа заменять по очереди цифры нулями и искать из списка ранее полученных записей совпадение с родителем, как-то так
Код:
def f(code)
	index = len(code.rstrip('0')) - 1
	parent = ''
	while index > 0:
		code_new = code[:index].ljust(8, '0')
		# records_list - список из ранее полученных кодов в которых точно есть родитель
		if code_new in records_list:
			parent = code_new
			break
		index -= 1
	return parent
Но эта логика не работает, как например у кода 71 871 000 родитель 71 850 000.
71 850 000 Городские округа Ханты-Мансийского автономного округа - Югры/
71 871 000 - город Ханты-Мансийск

В приказе который утверждает ОКТМО, сказано
Формула структуры кода ОКТМО в первом разделе:
ХХ ХХХ ХХХ,
где: 1, 2 знаки идентифицируют объекты классификации первой ступени классификации;
3 – 5 знаки идентифицируют объекты классификации второй ступени классификации;
6 – 8 знаки идентифицируют объекты классификации третьей ступени классификации;
На первой ступени классификации используется порядковый метод кодирования объектов классификации.
На второй и третьей ступенях классификации применяется последовательный метод
кодирования объектов классификации. При этом разряды 3 и 6 отведены под признаки
соответственно Р1 и Р2, указывающие ступень классификации и вид кодируемого объекта.
В этом случае применяется параллельный метод кодирования.

Что за последовательный и параллельный метод кодирования объектов классификации???
Может кто-то сталкивался с такой проблемой и подскажет как распарсить такой массив информации(получить родителя)?
polin11 вне форума Ответить с цитированием
Старый 30.11.2018, 04:21   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Предположу, что для 811–849 родитель 810. Для 851–898 родитель 850. Тоже самое, если признак P1 будет 9, а не 8. В остальных случаях (схема родитель -> ребенок):
XX 000 000 -> XX X00 000 -> XX XXX 000 -> XX XXX X00 -> XX XXX XXX, где X - какая-то ненулевая цифра. Зеленым обозначил, что именно нужно проверять на ноль и обнулять.
То есть, хранить родителей вообще не нужно, а нужно просто аккуратно занулять знаки. Но не могу это гарантировать, так как просто посмотрел бегло первый подвернувшийся том и немного потыкал какой-то сайт, который уже показывает иерархию.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 30.11.2018, 11:34   #3
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
По умолчанию

Все эти цифры до одного места пока з/п и грамотность не подымется до достойного уровня. Номерки дают люди, а не машина поэтому будут косяки в нумерации.
Цитата:
Сообщение от polin11 Посмотреть сообщение
найти родителя по иерархии, для каждой записи родитель идет раньше, чем сама запись
Вот вам и ответ, таблицу надо обработать построчно, родитель не имеет данных в графе "доп.данные". Поэтому либо так, либо создать новую таблицу с полем "код родителя".
jillitil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конфликт кодов Trimbl Microsoft Office Excel 6 23.06.2012 02:28
Конфликт кодов Brucebelg Microsoft Office Excel 3 10.02.2012 12:20
Генерация уникальных кодов Sorro Microsoft Office Excel 6 01.03.2010 10:54
Сканер штрих кодов asale Microsoft Office Excel 7 30.11.2008 19:57