コード例 #1
0
        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);
        }
コード例 #2
0
        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();
        }