コード例 #1
0
        static void SortAddresses(List <string> args)
        {
            Console.WriteLine("Sort Addresses");
            if (args.Count < 3)
            {
                throw new NormalException("Not enough arguments!  Usage: alba sort-addresses <alba-tsv-input-file> <alba-tsv-output-file>");
            }

            string inputPath  = args[1];
            string outputPath = args[2];

            Console.WriteLine($"Input File Path: {inputPath}");
            Console.WriteLine($"Output File Path: {outputPath}");

            var addresses = LoadTsvAlbaAddresses.LoadFrom(inputPath);
            var errors    = new List <AlbaAddressExport>();
            var output    = new List <AlbaAddressExport>();
            var sorted    = addresses
                            .OrderBy(a => a.City)
                            .ThenBy(a => a.Address)
                            .ThenBy(a => a.Suite)
                            .ToList();

            LoadTsvAlbaAddresses.SaveTo(sorted, outputPath);
        }
コード例 #2
0
        static void ListLanguages(List <string> args)
        {
            Console.WriteLine("List Languages from Alba TSV Address File");
            if (args.Count < 2)
            {
                throw new NormalException("Not enough arguments!  Usage: alba list-languages <alba-tsv-input-file>");
            }

            string inputPath = args[1];

            Console.WriteLine($"Input File Path: {inputPath}");

            var addresses = LoadTsvAlbaAddresses.LoadFrom(inputPath);

            var langGroups = addresses
                             .GroupBy(a => a.Language);

            Console.WriteLine("Languages:");
            foreach (var group in langGroups.OrderBy(g => g.Key))
            {
                Console.WriteLine($"{group.Key}: {group.Count()}");
            }

            Console.WriteLine($"Count: {langGroups.Count()}");
        }
コード例 #3
0
        static void FilterStatus(List <string> args)
        {
            Console.WriteLine("Filtering Status");
            if (args.Count < 4)
            {
                throw new NormalException("Not enough arguments!  Usage: alba filter-status status <alba-tsv-input-file> <alba-tsv-output-file>");
            }

            string status     = args[1];
            string inputPath  = args[2];
            string outputPath = args[3];

            Console.WriteLine($"Target Status: {status}");
            Console.WriteLine($"Input File Path: {inputPath}");
            Console.WriteLine($"Output File Path: {outputPath}");

            var addresses = LoadTsvAlbaAddresses.LoadFrom(inputPath);

            Console.WriteLine($"Before Count: {addresses.Count()}");

            var filtered = addresses
                           .Where(a => string.Equals(a.Status, status, StringComparison.OrdinalIgnoreCase))
                           .ToList();

            Console.WriteLine($"After Filter Count: {filtered.Count}");

            LoadTsvAlbaAddresses.SaveTo(filtered, outputPath);
        }
コード例 #4
0
        static void NormalizeAddresses(List <string> args)
        {
            Console.WriteLine("Normalize Addresses");
            if (args.Count < 3)
            {
                throw new NormalException("Not enough arguments!  Usage: alba normalize-addresses <alba-tsv-input-file> <alba-tsv-output-file>");
            }

            string inputPath  = args[1];
            string outputPath = args[2];

            Console.WriteLine($"Input File Path: {inputPath}");
            Console.WriteLine($"Output File Path: {outputPath}");

            var addresses = LoadTsvAlbaAddresses.LoadFrom(inputPath);

            var streetTypes = StreetType.Parse(StreetTypes);
            var parser      = new CompleteAddressParser(streetTypes);

            var errors     = new List <AlbaAddressExport>();
            var normalized = new List <AlbaAddressExport>();

            foreach (var a in addresses)
            {
                try
                {
                    //string before = $"{a.Address}, {a.Suite}, {a.City}, {a.Province}, {a.Postal_code}";
                    var address = parser.Normalize($"{a.Address}, {a.Suite}", a.City, a.Province, a.Postal_code);
                    a.Address     = address.CombineStreet();
                    a.Suite       = address.CombineUnit();
                    a.City        = address.City;
                    a.Province    = address.State;
                    a.Postal_code = address.PostalCode;
                    normalized.Add(a);
                    //Console.WriteLine($"{before} :: {a.Address}, {a.Suite}, {a.City}, {a.Province}, {a.Postal_code}");
                }
                catch (Exception e)
                {
                    errors.Add(a);
                    Console.WriteLine(e.Message);
                }
            }

            if (errors.Count > 0)
            {
                Console.WriteLine();
                Console.WriteLine("Errors:");
                foreach (var a in errors)
                {
                    Console.WriteLine(a.Address);
                }

                Console.WriteLine($"Count: {errors.Count}");
            }

            LoadTsvAlbaAddresses.SaveTo(normalized, outputPath);
            LoadTsvAlbaAddresses.SaveTo(errors, $"{outputPath}.errors.txt");
        }
コード例 #5
0
        static void ConvertLetterWritingAddresses(List <string> args)
        {
            Console.WriteLine("Convert Letter Writing Addresses");
            if (args.Count < 3)
            {
                throw new NormalException("Not enough arguments!  Usage: alba covert-addresses <letter-writing-csv-input-file> <alba-tsv-output-file>");
            }

            string inputPath  = args[1];
            string outputPath = args[2];

            Console.WriteLine($"Input File Path: {inputPath}");
            Console.WriteLine($"Output File Path: {outputPath}");

            var writingAddresses = LoadCsv <LetterWritingSheet> .LoadFrom(inputPath);

            var albaAddresses = new List <AlbaAddressExport>();
            var errors        = new List <LetterWritingSheet>();

            foreach (var a in writingAddresses)
            {
                try
                {
                    albaAddresses.Add(
                        new AlbaAddressExport
                    {
                        Address     = a.Address,
                        Suite       = a.Suite,
                        City        = a.City,
                        Postal_code = a.ZIP,
                        Province    = a.State,
                    }
                        );
                }
                catch (Exception e)
                {
                    errors.Add(a);
                    Console.WriteLine(e.Message);
                }
            }

            if (errors.Count > 0)
            {
                Console.WriteLine();
                Console.WriteLine("Errors:");
                foreach (var a in errors)
                {
                    Console.WriteLine(a.Address);
                }

                Console.WriteLine($"Count: {errors.Count}");
            }

            LoadTsvAlbaAddresses.SaveTo(albaAddresses, outputPath);
            LoadCsv <LetterWritingSheet> .SaveTo(errors, $"{outputPath}.errors.txt");
        }
コード例 #6
0
        static void CountAddresses(List <string> args)
        {
            Console.WriteLine("Count Addresses");
            if (args.Count < 2)
            {
                throw new NormalException("Not enough arguments!  Usage: alba count-addresses <alba-tsv-input-file>");
            }

            string inputPath = args[1];

            Console.WriteLine($"Input File Path: {inputPath}");

            var addresses = LoadTsvAlbaAddresses.LoadFrom(inputPath);

            Console.WriteLine($"Address Count: {addresses.Count()}");
        }
コード例 #7
0
        static void FilterLanguage(List <string> args)
        {
            Console.WriteLine("Filtering Languages");
            if (args.Count < 4)
            {
                throw new NormalException("Not enough arguments!  Usage: alba filter-language '<language1,language2...>' <alba-tsv-input-file> <alba-tsv-output-file>");
            }

            string languages  = args[1];
            string inputPath  = args[2];
            string outputPath = args[3];


            Console.WriteLine($"Input File Path: {inputPath}");
            Console.WriteLine($"Output File Path: {outputPath}");
            Console.WriteLine($"Languages: {languages}");
            Console.WriteLine($"Language List:");
            var languageList        = languages.Split(',', StringSplitOptions.RemoveEmptyEntries);
            var normalizedLanguages = new List <string>();

            foreach (string lang in languageList)
            {
                Console.WriteLine($"  {lang.Trim()}");
                normalizedLanguages.Add(lang.Trim().ToUpper());
            }

            var addresses = LoadTsvAlbaAddresses.LoadFrom(inputPath);

            Console.WriteLine($"Before Count: {addresses.Count()}");

            var filtered = addresses
                           .Where(a => normalizedLanguages.Contains(a.Language.ToUpper()))
                           //.Where(a => a.Language.StartsWith("Chinese"))
                           .ToList();

            Console.WriteLine($"After Filter Count: {filtered.Count}");

            LoadTsvAlbaAddresses.SaveTo(filtered, outputPath);
        }
コード例 #8
0
        static void ExcludeAddresses(List <string> args)
        {
            Console.WriteLine("Exclude Addresses");
            if (args.Count < 3)
            {
                throw new NormalException("Not enough arguments!  Usage: alba exclude-addresses <alba-tsv-input-file> <alba-tsv-to-exclude-file> <alba-tsv-output-file>");
            }

            string inputPath     = args[1];
            string toExcludePath = args[2];
            string outputPath    = args[3];

            Console.WriteLine($"Input File Path: {inputPath}");
            Console.WriteLine($"To Exclude File Path: {toExcludePath}");
            Console.WriteLine($"Output File Path: {outputPath}");

            var addresses  = LoadTsvAlbaAddresses.LoadFrom(inputPath);
            var exclusions = LoadTsvAlbaAddresses.LoadFrom(toExcludePath);

            var errors = new List <AlbaAddressExport>();
            var output = new List <AlbaAddressExport>();

            foreach (var address in addresses)
            {
                try
                {
                    bool wasMatched = false;
                    foreach (var exclusion in exclusions)
                    {
                        if (string.Equals(address.Address, exclusion.Address, StringComparison.OrdinalIgnoreCase) &&
                            string.Equals(address.Suite, exclusion.Suite, StringComparison.OrdinalIgnoreCase) &&
                            (string.Equals(address.City, exclusion.City, StringComparison.OrdinalIgnoreCase) ||
                             string.Equals(address.Postal_code, exclusion.Postal_code, StringComparison.OrdinalIgnoreCase)) &&
                            string.Equals(address.Province, exclusion.Province, StringComparison.OrdinalIgnoreCase))
                        {
                            wasMatched = true;
                            break;
                        }
                    }

                    if (!wasMatched)
                    {
                        output.Add(address);
                    }
                }
                catch (Exception e)
                {
                    errors.Add(address);
                    Console.WriteLine(e.Message);
                }
            }

            if (errors.Count > 0)
            {
                Console.WriteLine();
                Console.WriteLine("Errors:");
                foreach (var a in errors)
                {
                    Console.WriteLine(a.Address);
                }

                Console.WriteLine($"Count: {errors.Count}");
            }

            LoadTsvAlbaAddresses.SaveTo(output, outputPath);

            if (errors.Count > 0)
            {
                LoadTsvAlbaAddresses.SaveTo(errors, $"{outputPath}.errors.txt");
            }
        }
コード例 #9
0
        static void MatchAddresses(List <string> args)
        {
            Console.WriteLine("Match Addresses");
            if (args.Count < 3)
            {
                throw new NormalException("Not enough arguments!  Usage: alba match-addresses <alba-tsv-input-file> <csv-match-file> <alba-tsv-output-file>");
            }

            string inputPath  = args[1];
            string matchPath  = args[2];
            string outputPath = args[3];

            Console.WriteLine($"Input File Path: {inputPath}");
            Console.WriteLine($"Match File Path: {matchPath}");
            Console.WriteLine($"Output File Path: {outputPath}");

            var addresses = LoadTsvAlbaAddresses.LoadFrom(inputPath);
            var matches   = LoadTsvAlbaAddresses.LoadFrom(matchPath);

            var errors = new List <AlbaAddressExport>();
            var output = new List <AlbaAddressExport>();

            var streetTypes = StreetType.Parse(StreetTypes);
            var parser      = new CompleteAddressParser(streetTypes);

            foreach (var a in addresses)
            {
                try
                {
                    foreach (var b in matches)
                    {
                        //string aText = $"{a.Address}, {a.Suite}, {a.City}, {a.Province} {a.Postal_code}";
                        //string bText = $"{b.Address}, {b.Suite}, {b.City}, {b.Province} {b.Postal_code}";
                        //if (parser.Parse(aText)
                        //    .SameAs(
                        //        other: parser.Parse(bText),
                        //        options: Address.SameAsOptions.ComparePostalCode))
                        //{
                        if (string.Equals(a.Address, b.Address, StringComparison.OrdinalIgnoreCase) &&
                            string.Equals(a.Suite, b.Suite, StringComparison.OrdinalIgnoreCase) &&
                            (string.Equals(a.City, b.City, StringComparison.OrdinalIgnoreCase) ||
                             string.Equals(a.Postal_code, b.Postal_code, StringComparison.OrdinalIgnoreCase)) &&
                            string.Equals(a.Province, b.Province, StringComparison.OrdinalIgnoreCase))
                        {
                            output.Add(a);
                        }
                    }
                }
                catch (Exception e)
                {
                    errors.Add(a);
                    Console.WriteLine(e.Message);
                }
            }

            if (errors.Count > 0)
            {
                Console.WriteLine();
                Console.WriteLine("Errors:");
                foreach (var a in errors)
                {
                    Console.WriteLine(a.Address);
                }

                Console.WriteLine($"Count: {errors.Count}");
            }

            LoadTsvAlbaAddresses.SaveTo(output, outputPath);

            if (errors.Count > 0)
            {
                LoadTsvAlbaAddresses.SaveTo(errors, $"{outputPath}.errors.txt");
            }
        }