public bool DoOneZipCode(string zipCode) { // Get all zip rows from ZipStreetsDownloaded var isSingle = false; var found = false; string singleLdsStateCode = null; var streetsTable = ZipStreetsDownloaded.GetLookupDataByZipCode(zipCode, 0); if (streetsTable.Count > 0) { found = true; // Fetch and summarize the USZD data var ldsDictionary = new Dictionary <LdsInfo, object>(); var zip4S = CreateZipPlus4List(streetsTable); var uszdTable = Uszd.GetDataByZip4List(zipCode, zip4S, 0); foreach (var row in uszdTable) { var stateCode = StateCache.StateCodeFromLdsStateCode(row.LdsStateCode); singleLdsStateCode = row.LdsStateCode; var ldsInfo = new LdsInfo(stateCode, row.Congress, row.StateSenate, row.StateHouse, row.County); ldsDictionary[ldsInfo] = null; } if (ldsDictionary.Count == 1) { isSingle = true; var singleLdsInfo = ldsDictionary.Keys.Single(); if (!_SuppressUpdate) { ZipSingleUszd.Insert(zipCode: zipCode, congress: singleLdsInfo.Congress.Substring(1), // LdsInfo padds it to 3 stateSenate: singleLdsInfo.StateSenate, stateHouse: singleLdsInfo.StateHouse, ldsStateCode: singleLdsStateCode, county: singleLdsInfo.County, stateCode: singleLdsInfo.StateCode); } } } if (found) { Report("{0}: {1}", zipCode, isSingle ? "Single" : "Multiple"); } return(isSingle); }
public void SetMissingLdsInfo() => LdsInfo = LdsInfo.Missing;
//private void CheckForSingleLdsOverall(Dictionary<string, List<StreetAnalysisData>> splits) //{ // // If all entries in all three lists have the same ldsInfo, we can // // substitute a single "B" entry // StreetAnalysisData firstFound = null; // bool canSubstitute = true; // foreach (var split in splits.Values) // { // foreach (var data in split) // if (firstFound == null) // firstFound = data; // else if (firstFound.LdsInfo != data.LdsInfo) // no good // { // canSubstitute = false; // break; // } // if (!canSubstitute) break; // } // if (canSubstitute) // { // // use firstFound as the "B" entry // firstFound.PrimaryOddEven = "B"; // firstFound.PrimaryLowNumber = string.Empty; // firstFound.PrimaryHighNumber = string.Empty; // firstFound.BuildingName = string.Empty; // firstFound.SecondaryType = string.Empty; // firstFound.SecondaryLowNumber = string.Empty; // firstFound.SecondaryHighNumber = string.Empty; // // adjust count and clear out old // foreach (var split in splits.Values) // { // _Statistics.Merged += split.Count; // split.Clear(); // } // // add in new // splits["B"].Add(firstFound); // _Statistics.Merged--; // } //} private static bool CheckPoBoxRange(StreetAnalysisData data, ICollection <StreetAnalysisData> deletions, ICollection <StreetAnalysisData> additions) { var addressLow = long.Parse(data.PrimaryLowNumber); var addressHigh = long.Parse(data.PrimaryHighNumber); var zip4Low = int.Parse(data.Plus4Low); var zip4High = int.Parse(data.Plus4High); // Ranges must correspond if (addressHigh - addressLow != zip4High - zip4Low) { return(false); } // This dictionary caches the Zip+4 values var zip4List = CreateZip4List(zip4Low, zip4High); var ldsDictionary = GetLdsInfoDictionary(data.ZipCode, zip4List); // Build the list of results var boxList = new List <PoBoxInfo>(); for (var n = 0; n <= addressHigh - addressLow; n++) { var address = (addressLow + n).ToString(CultureInfo.InvariantCulture) .ZeroPad(AddressFinder.MaxHouseNumberLength); var zip4 = (zip4Low + n).ToString(CultureInfo.InvariantCulture) .ZeroPad(4); LdsInfo ldsInfo; if (!ldsDictionary.TryGetValue(zip4, out ldsInfo)) { ldsInfo = LdsInfo.Missing; } boxList.Add(new PoBoxInfo { Address = address, LdsInfo = ldsInfo }); } // Summarize to additions LdsInfo currentLdsInfo = null; string lowAddress = null; var sequence = 0; for (var n = 0; n <= boxList.Count; n++) { var endOfData = n == boxList.Count; if (endOfData || (boxList[n].LdsInfo != currentLdsInfo)) { if (currentLdsInfo != null) // create new { sequence++; var toAdd = data.Clone(); toAdd.UpdateKey += "-" + sequence.ToString(CultureInfo.InvariantCulture) .ZeroPad(2); toAdd.PrimaryLowNumber = lowAddress; toAdd.PrimaryHighNumber = boxList[n - 1].Address; toAdd.LdsInfo = currentLdsInfo; additions.Add(toAdd); } if (!endOfData) { currentLdsInfo = boxList[n].LdsInfo; lowAddress = boxList[n].Address; } } } deletions.Add(data); return(true); }
public static bool Equals(LdsInfo x, LdsInfo y) => (x.StateCode == y.StateCode) && (x.Congress == y.Congress) && (x.StateSenate == y.StateSenate) && (x.StateHouse == y.StateHouse) && (x.County == y.County);