Exemple #1
0
        public static House ParseHouse(string addrStr)
        {
            var house        = new House();
            var houseMarkers = Markers.CreateHouseMarkers();

            foreach (var marker in houseMarkers) //Пробуем поиск по маркеру дома
            {
                var index = addrStr.IndexOf(marker);
                if (index < 0)
                {
                    continue;
                }

                house.Number = TextParser.GetNextWord(addrStr, index, marker);
                break;
            }

            if (string.IsNullOrEmpty(house.Number))
            {
                var digitPos = addrStr.IndexOfAny(digits);
                if (digitPos > 0)
                {
                    house.Number = TextParser.GetNextWord(addrStr, digitPos, "");
                }
            }

            if (string.IsNullOrEmpty(house.Number))
            {
                return(null);
            }

            var subHouseMarkers = Markers.CreateSubHouseMarkers();

            foreach (var marker in subHouseMarkers) //Пробуем поиск по маркеру корпуса
            {
                var index = addrStr.IndexOf(marker);
                if (index < 0)
                {
                    continue;
                }

                house.SubNumber = TextParser.GetNextWord(addrStr, index, marker);
                break;
            }

            return(house);
        }
Exemple #2
0
        public static Street ParseStreet(string addrStr)
        {
            string[] markers = Markers.CreateStreetMarkers();
            foreach (var marker in markers)
            {
                var markerPos = addrStr.IndexOf(marker);
                if (markerPos < 0)
                {
                    continue;
                }

                string shortName = string.Empty;
                if (markerPos == 0) //Не нашли маркер улицы
                {
                    var houseMarkers = Markers.CreateHouseMarkers();
                    foreach (var house in houseMarkers) //Пробуем поиск по маркеру дома
                    {
                        var houseIndex = addrStr.IndexOf(house);
                        if (houseIndex < 0)
                        {
                            continue;
                        }

                        shortName = addrStr.Substring(markerPos + marker.Length, houseIndex - marker.Length).Trim(TrimChars);
                        return(new Street(shortName, marker));
                    }

                    throw new Exception(string.Format("Не найден маркер дома. Строка: {0}", addrStr));
                }
                else
                {
                    shortName = addrStr.Substring(0, markerPos).Trim(TrimChars);
                    return(new Street(shortName, marker));
                }
            }

            var digitPos = addrStr.IndexOfAny(digits);

            if (digitPos > 0)
            {
                return(new Street(addrStr.Substring(0, digitPos).Trim(TrimChars), " "));
            }

            throw new Exception(string.Format("Не найден маркер адреса строка:{0}", addrStr));
        }