public static void WriteFile(string aFileName, PrecinctMap aPrecinctMap, Dictionary <int, List <string> > aFailedParsesByZip) { var linesToWrite = new List <string>(512); foreach (var kvp in aPrecinctMap) { linesToWrite.Add($"PRECINCT {kvp.Key}"); kvp.Value.Sort(); foreach (var house in kvp.Value) { linesToWrite.Add($"\t { house.AddrLineOne }"); } } if (aFailedParsesByZip.Count > 0) { linesToWrite.Add("UNKNOWN PRECINCTS"); foreach (var kvp in aFailedParsesByZip) { linesToWrite.Add(kvp.Key.ToString()); foreach (var failedVal in kvp.Value) { linesToWrite.Add($"\t {failedVal}"); } } } WriteFile(aFileName, linesToWrite); }
static void Main(string[] args) { Init(); var defaultListSize = 16; var dirList = new List <string>(defaultListSize); var filePaths = new List <String>(defaultListSize); foreach (var str in args) { if (File.Exists(str)) { filePaths.Add(str); } else if (Directory.Exists(str)) { dirList.Add(str); } } dirList.Add(Directory.GetCurrentDirectory()); foreach (var dir in dirList) { if (Directory.Exists(dir)) { Console.WriteLine($"Searching {dir} for .txt files"); filePaths.AddRange(Directory.GetFiles(dir, "*.txt").Where(f => !f.Contains("PRECINCTS")).ToList()); } } Console.WriteLine($"Found {filePaths.Count} Files:"); if (filePaths.Count == 0) { Console.WriteLine($"No files found."); } foreach (var filePath in filePaths) { Console.WriteLine(filePath); } Console.WriteLine($"Press any key to continue..."); WaitForInput(); //Put this up here so we arent recreating it. Whatevs. //IDK just make something up _httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"); foreach (var filePath in filePaths) { Console.WriteLine($"Getting precincts in file {filePath}"); //New lines with the precinct number var failedParses = new Dictionary <int, List <string> >(); var addressDataByPrecinct = new PrecinctMap(); var fileLines = File.ReadLines(filePath); var curZipcode = 0; foreach (var fileLine in fileLines) { //blank if (string.IsNullOrWhiteSpace(fileLine)) { continue; } var addressLineTrimmed = fileLine.Trim(); //Zipcode line if (Regex.IsMatch(addressLineTrimmed, @"(^\d{5}$)|(^\d{9}$)|(^\d{5}-\d{4}$)")) { if (Int32.TryParse(addressLineTrimmed, out curZipcode)) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"Getting precincts for zipcode {curZipcode}"); Console.ForegroundColor = ConsoleColor.White; } else { Console.WriteLine($"Could not parse zipcode from { addressLineTrimmed }"); } continue; } if (curZipcode != 0) { Console.WriteLine($"Getting precinct for {addressLineTrimmed}"); try { var queriedAddress = AddressData.QueryForAddressData(addressLineTrimmed, curZipcode); if (queriedAddress != null) { var addrList = Utils.GetOrCreateListInDict(addressDataByPrecinct, queriedAddress.PrecinctNumber); addrList.Add(queriedAddress); } else { var failedParseList = Utils.GetOrCreateListInDict(failedParses, curZipcode); failedParseList.Add(addressLineTrimmed); } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"Failed to get precinct for {addressLineTrimmed}: {ex}"); Console.ForegroundColor = ConsoleColor.White; if (Debugger.IsAttached) { throw ex; } } } } var oldFileName = filePath.Replace(".txt", ""); var newFileName = oldFileName + "_PRECINCTS.txt"; Console.WriteLine($"Creating new file {newFileName} with precinct names"); Utils.WriteFile(newFileName, addressDataByPrecinct, failedParses); } Console.WriteLine($"Finished, Press any key to exit..."); Console.ReadLine(); }