vsharmanov
@vsharmanov

Номера домов в КЛАДР, C# и T-SQL

Уважаемые хабражители. У меня вот такой вопрос.

Мне нужно перестроить КЛАДР (всероссийский классификатор адресов) в удобоваримую иерархическую структуру. После бессонной ночи, полусотни сигарет и ведра кофе осталось только распарсить строки в таблице DOMA.

Как известно, в базе данных КЛАДР названия домов хранятся примерно в таком формате:

Н(19-31), Н(67-77), Ч(2-40),65

или

4к1,4к2,4к3,6к1,6к2,8к1стр3,8к2,10.

Каким образом, используя C# и T-SQL, можно перобразовать эти строки просто в список домов, строений, корпусов и так далее по-порядку? Я понимаю, что тут можно использовать регулярные выражения, но я, увы, в них не силен.
  • Вопрос задан
  • 4813 просмотров
Решения вопроса 1
@antonlustin
так подойдет?
// Передаем в качестве Value - строку c перечнем зданий из таблицы KA_DOMA
        private List<string> HousDecode(string value)
        {
            List<string> tempCollection = new List<string>();

            // Парс 'шифровки' домов для улицы
            string[] tmp1 = value.Split(',');
            foreach (string txt in tmp1)
            {
                if (txt.ToUpper().IndexOf('Ч') != -1 || txt.ToUpper().IndexOf('Н') != -1)
                {
                    string tmptxt = txt.Replace(")", "");
                    string[] v = (tmptxt.Split('(')[1]).Split('-');
                    int v1 = Convert.ToInt32(v[0]);
                    int v2 = Convert.ToInt32(v[1]);

                    for (int i = v1; i <= v2; i = i + 2)
                    {
                        tempCollection.Add(i.ToString().Trim());
                    }
                    continue;
                }
                if (txt.ToUpper().IndexOf('-') != -1)
                {
                    string[] v = txt.Split('-');
                    int v1 = Convert.ToInt32(v[0]);
                    int v2 = Convert.ToInt32(v[1]);

                    for (int i = v1; i <= v2; i++)
                    {
                        tempCollection.Add(i.ToString().Trim());
                    }
                    continue;
                }
                tempCollection.Add(txt.Trim());
            }
            return tempCollection;
        }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы