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); }
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)); }