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); }
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()}"); }
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); }
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"); }
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"); }
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()}"); }
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); }
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"); } }
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"); } }