/// <summary> /// Разбор первого уровня. Уровень собирается в строчку хз как. /// Акроним может быть как в полном, так и в сокращенном виде с точкой или без. /// Акроним может быть слева или справа или вообще может отсутсвовать /// </summary> /// <param name="s">исходные имя и акроним</param> /// <returns></returns> private bool ParseLvl0(string s) { if (string.IsNullOrEmpty(s)) { return(false); } string sql = "select * from tblKLADR where GeoType=@lvl and @s like '%' + Name + '%'"; var founded = DbHelper.Select <ObjGeo>(sql, DbHelper.CreateParameter("@lvl", GeoLevelType.State), DbHelper.CreateParameter("@s", s)).ToList(); var foundAcronym = new List <string>(); foreach (var geo in founded) { if (geo.Name.Equals(s, StringComparison.CurrentCultureIgnoreCase) || string.Format("{0} {1}", geo.AcronymName, geo.Name).Equals(s, StringComparison.CurrentCultureIgnoreCase) || string.Format("{0} {1}", geo.Name, geo.AcronymName).Equals(s, StringComparison.CurrentCultureIgnoreCase) || string.Format("{0}. {1}", geo.AcronymShortName, geo.Name).Equals(s, StringComparison.CurrentCultureIgnoreCase) || string.Format("{0} {1}.", geo.Name, geo.AcronymShortName).Equals(s, StringComparison.CurrentCultureIgnoreCase)) { if (!foundAcronym.Contains(geo.AcronymName)) { foundAcronym.Add(geo.AcronymName); } } } currentFoundState.AddRange(AddressParser.CloseLevelFound(null, founded, foundAcronym, new AddressTemplate(0, -1, 0, 0), s)); return(currentFoundState.Any(point => point.FoundGeo != null && point.FoundGeo.Level == GeoLevelType.State)); }
/// <summary> /// Разбор уровней с региона по улицу. /// Формат следующий: имя пробел сокр.акроним точка /// </summary> /// <param name="s"></param> /// <param name="lvl"></param> /// <returns></returns> private bool ParseLvl14(string s, GeoLevelType lvl) { if (string.IsNullOrEmpty(s)) { return(false); } if (lvl == GeoLevelType.State) { return(ParseLvl0(s)); } Match m = Lvl14Rx.Match(s); string name = m.Groups["Name"].Value; string acronym = m.Groups["Acronym"].Value; var cmd = DbHelper.CreateCommand("select * from tblKLADR where GeoType=@lvl and Name=@name and AcrShortName=@acr") .AddParameter("@name", name) .AddParameter("@lvl", lvl) .AddParameter("@acr", acronym); var cutCondition = currentFoundState.Where(point => point.Template.ParentID == -1).Select(point => GeoLevelType.State.CodePart(point.FoundGeo.Code)); if (!Utils.IsCollectionEmpty(cutCondition)) { cmd.CommandText = cmd.CommandText + " and left(Code,2)=@state_code"; cmd.ExpandParameterToList <string>("@state_code", cutCondition); } var founded = cmd.Select <ObjGeo>().ToList(); var foundAcronym = new List <string>(); foreach (var geo in founded) { if (!foundAcronym.Contains(geo.AcronymName)) { foundAcronym.Add(geo.AcronymName); } } currentFoundState.AddRange( AddressParser.CloseLevelFound( currentFoundState.Where(p => p.ChildEndPoints.Count() == 0) , founded, foundAcronym, new AddressTemplate((int)lvl, (int)lvl - 1, 0, (int)lvl), s)); return(currentFoundState.Any(point => point.FoundGeo != null && point.FoundGeo.Level == lvl)); }