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