static void Main(string[] args) { Dictionary <string, List <string> > admin1codes; Dictionary <string, List <string> > admin2codes; Dictionary <string, List <string> > countries; Dictionary <string, List <string> > features; List <string> filters; FlagParser.ContinueOnError = true; FlagParser.Parse(args); bool help = FlagParser.BoolFlag("help", false, false); if (help || args.Length == 0) { DisplayUsage(); return; } // process input flags string admin1File = FlagParser.StringFlag("admin1", string.Empty, true); string admin2File = FlagParser.StringFlag("admin2", string.Empty, true); string countryFile = FlagParser.StringFlag("countries", string.Empty, true); string featureFile = FlagParser.StringFlag("feature", string.Empty, true); string input = FlagParser.StringFlag("input", string.Empty, true); string output = FlagParser.StringFlag("output", string.Empty, true); string filter = FlagParser.StringFlag("filter", string.Empty, false); string outputType = FlagParser.StringFlag("type", "default", false); if (FlagParser.Errors.Count > 0) { foreach (var e in FlagParser.Errors) { Console.WriteLine(e); } return; } // read admin1 codes admin1codes = ReadAdmin1File(admin1File); if (admin1codes == null) { return; } // read admin2 codes admin2codes = ReadAdmin2File(admin2File); if (admin2codes == null) { return; } // read country codes countries = ReadCountryFile(countryFile); if (countries == null) { return; } // read feature codes features = ReadFeatureFile(featureFile); if (features == null) { return; } // put filters as list filters = new List <string>(); var fltrs = filter.Split(new char[] { ',' }); foreach (var fltr in fltrs) { filters.Add(fltr); } switch (outputType) { case "full-structured": GenerateFullStructuredOutput(input, output, features, filters, countries, admin1codes, admin2codes); break; case "full-flat": default: GenerateDefaultOutput(input, output, features, filters, countries, admin1codes, admin2codes); break; } }