コード例 #1
0
        public static async Task Main(string[] args)
        {
            if (args == null || args.Length < 1)
            {
                Program.PrintHelp(error: "Missing required arguments");
                return;
            }

            if (args.Length > 4)
            {
                Program.PrintHelp(error: "Too many arguments");
                return;
            }

            string sourceFile          = null;
            string targetFile          = null;
            string listVersionNameFile = null;
            string versionMappingFile  = null;

            for (int i = 0; i < args.Length; i++)
            {
                string arg = args[i];
                if (arg.StartsWith("/?"))
                {
                    Program.PrintHelp();
                    return;
                }

                if (arg.StartsWith("/s:"))
                {
                    sourceFile = arg.Substring(3);
                }
                else if (arg.StartsWith("/t:"))
                {
                    targetFile = arg.Substring(3);
                }
                else if (arg.StartsWith("/v:"))
                {
                    listVersionNameFile = arg.Substring(3);
                }
                else if (arg.StartsWith("/m:"))
                {
                    versionMappingFile = arg.Substring(3);
                }
                else
                {
                    Program.PrintHelp($"Unknown argument {arg}");
                    return;
                }
            }

            if (string.IsNullOrEmpty(sourceFile) ||
                !File.Exists(sourceFile))
            {
                Program.PrintHelp($"Source file {sourceFile} doesn't exist");
                return;
            }

            if (targetFile == null)
            {
                targetFile = Path.Combine(Path.GetDirectoryName(sourceFile), Path.GetFileNameWithoutExtension(sourceFile) + ".sorted.csv");
            }

            if (File.Exists(targetFile))
            {
                Program.PrintHelp($"Target file {targetFile} already exists");
                return;
            }

            if (!string.IsNullOrEmpty(listVersionNameFile) && !File.Exists(listVersionNameFile))
            {
                Program.PrintHelp($"List version name file {listVersionNameFile} doesn't exist");
                return;
            }

            if (string.IsNullOrEmpty(versionMappingFile) || !File.Exists(versionMappingFile))
            {
                Program.PrintHelp($"Version-mapping file {versionMappingFile} doesn't exist");
                return;
            }

            try
            {
                // Parse list version-name file:
                List <string> listVersions = CsvParsingHelper.DefaultListVersions;
                if (!string.IsNullOrEmpty(listVersionNameFile))
                {
                    listVersions = await CsvParsingHelper.GetListVersions(listVersionNameFile);
                }

                // Parse version mapping file:
                Dictionary <string, Dictionary <DateTime, string> > versionMapping = null;
                List <string> versionColumnsPresent = null;
                if (!string.IsNullOrEmpty(versionMappingFile))
                {
                    (versionMapping, versionColumnsPresent) = await CsvParsingHelper.GetVersionMappings(versionMappingFile, listVersions);
                }

                // Parse source rows from the CSV
                List <SourceRow> sourceRows = await CsvParsingHelper.GetSourceRows(sourceFile);

                (List <ResultRow> rows, List <string> headers) = CsvParsingHelper.MapSourceRowsToTargetRows(listVersions, versionMapping, versionColumnsPresent, sourceRows);

                await CsvParsingHelper.WriteResultRows(targetFile, rows, headers);
            }
            catch (SeatcardSorterException ex)
            {
                Program.PrintHelp(ex.ToString());
            }
        }