Ejemplo n.º 1
0
        public static int Main(string[] args)
        {
            Trace.Listeners.Add(new ConsoleTraceListener());

            if (args == null || args.Length < 3)
            {
                Trace.WriteLine(Usage);
                return(-1);
            }

            string mode = args[0].ToLowerInvariant();

            try
            {
                using (new TraceWatch(String.Empty))
                {
                    switch (mode)
                    {
                    case "copy":
                        Trace.WriteLine(String.Format("Copy \"{0}\" to \"{1}\"...", args[1], args[2]));
                        if (args.Length < 4)
                        {
                            Copy(args[1], args[2]);
                        }
                        else
                        {
                            Copy(args[1], args[2], args[3]);
                        }
                        break;

                    case "concat":
                        Trace.WriteLine(String.Format("Concatenating \"{0}\" values on first column into \"{1}\"...", args[1], args[2]));
                        Concatenate(args[1], args[2], String8.Convert("; ", new byte[2]));
                        break;

                    case "notstartswith":
                        if (args.Length < 5)
                        {
                            throw new UsageException("notStartsWith requires a value and name column to be passed.");
                        }
                        Trace.WriteLine(String.Format("Writing \"{0}\" values into \"{1}\" where !row[{2}].StartsWith(row[{3}])", args[1], args[2], args[3], args[4]));
                        NotStartsWith(args[1], args[2], args[3], args[4]);
                        break;

                    case "compare":
                        if (args.Length < 5)
                        {
                            throw new UsageException("compare requires two input files, an output file, and a column identifier to compare.");
                        }
                        Trace.WriteLine(String.Format("Comparing values for \"{0}\" values between \"{1}\" and \"{2}\"...", args[1], args[2], args[3], args[4]));
                        Compare(args[1], args[2], args[3], args[4]);
                        break;

                    case "onlyin":
                        if (args.Length < 5)
                        {
                            throw new UsageException("onlyIn requires a second input file and column identifier");
                        }
                        Trace.WriteLine(String.Format("Writing \"{0}\" values into \"{1}\" where \"{2}\" also had the same \"{3}\"...", args[1], args[2], args[3], args[4]));
                        OnlyIn(args[1], args[2], args[3], args[4]);
                        break;

                    case "sanitize":
                        if (args.Length < 5)
                        {
                            throw new UsageException("sanitize requires input, output, specFile, hashKey");
                        }
                        Trace.WriteLine(String.Format("Sanitizing \"{0}\" into \"{1}\" using \"{2}\"...", args[1], args[2], args[3]));
                        Xsv.Sanitize.Sanitizer s = new Xsv.Sanitize.Sanitizer(args[3], args[4]);
                        s.Sanitize(args[1], args[2]);
                        break;

                    case "sanitizevalue":
                        if (args.Length < 5)
                        {
                            throw new UsageException("sanitize requires value, columnName, specFile, hashKey");
                        }
                        Trace.WriteLine(String.Format("Sanitizing \"{0}\" from column \"{1}\" using \"{2}\"...", args[1], args[2], args[3]));
                        Trace.WriteLine(new Xsv.Sanitize.Sanitizer(args[3], args[4]).Translate(args[1], args[2]));
                        break;

                    case "where":
                        if (args.Length < 3)
                        {
                            throw new UsageException("row requires input and rowIndex");
                        }
                        Where(args[1], args[2], (args.Length > 3 ? args[3] : null), (args.Length > 4 ? TabularFactory.BuildWriter(args[4]) : null));
                        break;

                    default:
                        throw new NotSupportedException(String.Format("XSV mode \"{0}\" is unknown. Run without arguments to see valid modes.", mode));
                    }
                }

                return(0);
            }
            catch (UsageException ex)
            {
                Trace.WriteLine(ex.Message);
                Trace.WriteLine(Usage);
                return(-2);
            }
            catch (Exception ex) when(!Debugger.IsAttached)
            {
                Trace.WriteLine("ERROR: " + ex.ToString());
                return(-1);
            }
        }
Ejemplo n.º 2
0
        public static int Main(string[] args)
        {
            Trace.Listeners.Add(new ConsoleTraceListener());

            if (args == null || args.Length < 3)
            {
                Trace.WriteLine(Usage);
                return(-1);
            }

            string mode = args[0].ToLowerInvariant();

            try
            {
                using (new TraceWatch(String.Empty))
                {
                    switch (mode)
                    {
                    case "copy":
                        Trace.WriteLine(String.Format("Copy \"{0}\" to \"{1}\"...", args[1], args[2]));
                        if (args.Length < 4)
                        {
                            Copy(args[1], args[2]);
                        }
                        else
                        {
                            Copy(args[1], args[2], args[3]);
                        }
                        break;

                    case "first":
                        if (args.Length < 4)
                        {
                            throw new UsageException("first requires an input, output, and row count.");
                        }
                        Trace.WriteLine(String.Format("Getting first {2} rows from \"{0}\" into \"{1}\"...", args[1], args[2], args[3]));
                        Copy(args[1], args[2], int.Parse(args[3]));
                        break;

                    case "distinct":
                        if (args.Length < 4)
                        {
                            throw new UsageException("distinct requires an input, output, and column identifier.");
                        }
                        Trace.WriteLine(String.Format("Writing Distinct values for {2} from \"{0}\" into \"{1}\"...", args[1], args[2], args[3]));
                        Distinct(args[1], args[2], args[3]);
                        break;

                    case "append":
                        if (args.Length < 3)
                        {
                            throw new UsageException("append requires an input and output");
                        }
                        Trace.WriteLine(String.Format("Appending from \"{0}\" to \"{1}\"...", args[1], args[2]));
                        Append(args[1], args[2], (args.Length > 3 ? args[3] : null));
                        break;

                    case "rowid":
                        if (args.Length < 3)
                        {
                            throw new UsageException("rowid requires an input and output");
                        }
                        Trace.WriteLine(String.Format("Adding autoincrementing ID column from \"{0}\" to \"{1}\"...", args[1], args[2]));
                        RowId(args[1], args[2], (args.Length > 3 ? int.Parse(args[3]) : 1));
                        break;

                    case "concat":
                        Trace.WriteLine(String.Format("Concatenating \"{0}\" values on first column into \"{1}\"...", args[1], args[2]));
                        Concatenate(args[1], args[2], String8.Convert("; ", new byte[2]));
                        break;

                    case "concatcol":
                        if (args.Length < 7)
                        {
                            throw new UsageException("concatCol requires input, output, col1, separator, col2, outColName");
                        }
                        Trace.WriteLine(String.Format("Concatenating \"[{2}] + \"{3}\" + [{4}]\" from \"{0}\" into column \"{5}\" in \"{1}\"...", args[0], args[1], args[2], args[3], args[4], args[5], args[6]));
                        ConcatenateColumn(args[1], args[2], args[3], args[4], args[5], args[6]);
                        break;

                    case "notstartswith":
                        if (args.Length < 5)
                        {
                            throw new UsageException("notStartsWith requires a value and name column to be passed.");
                        }
                        Trace.WriteLine(String.Format("Writing \"{0}\" values into \"{1}\" where !row[{2}].StartsWith(row[{3}])", args[1], args[2], args[3], args[4]));
                        NotStartsWith(args[1], args[2], args[3], args[4]);
                        break;

                    case "compare":
                        if (args.Length < 5)
                        {
                            throw new UsageException("compare requires two input files, an output file, and a column identifier to compare.");
                        }
                        Trace.WriteLine(String.Format("Comparing values for \"{0}\" values between \"{1}\" and \"{2}\"...", args[1], args[2], args[3], args[4]));
                        Compare(args[1], args[2], args[3], args[4]);
                        break;

                    case "onlyin":
                        if (args.Length < 5)
                        {
                            throw new UsageException("onlyIn requires a second input file and column identifier");
                        }
                        Trace.WriteLine(String.Format("Writing \"{0}\" values into \"{1}\" where \"{2}\" also had the same \"{3}\"...", args[1], args[2], args[3], args[4]));
                        OnlyIn(args[1], args[2], args[3], args[4]);
                        break;

                    case "onlylatest":
                        if (args.Length < 4)
                        {
                            throw new UsageException("onlyLatest requires an input folder, output file, and column identifier");
                        }
                        Trace.WriteLine(String.Format("Copying latest rows by \"{2}\" from \"{0}\" into \"{1}\"...", args[1], args[2], args[3]));
                        OnlyLatest(args[1], args[2], args[3]);
                        break;

                    case "sanitize":
                        if (args.Length < 5)
                        {
                            throw new UsageException("sanitize requires input, output, specFile, hashKey");
                        }
                        Trace.WriteLine(String.Format("Sanitizing \"{0}\" into \"{1}\" using \"{2}\"...", args[1], args[2], args[3]));
                        Xsv.Sanitize.Sanitizer s = new Xsv.Sanitize.Sanitizer(args[3], args[4]);
                        s.Sanitize(args[1], args[2]);
                        break;

                    case "sanitizevalue":
                        if (args.Length < 5)
                        {
                            throw new UsageException("sanitize requires value, columnName, specFile, hashKey");
                        }
                        Trace.WriteLine(String.Format("Sanitizing \"{0}\" from column \"{1}\" using \"{2}\"...", args[1], args[2], args[3]));
                        Trace.WriteLine(new Xsv.Sanitize.Sanitizer(args[3], args[4]).Translate(args[1], args[2]));
                        break;

                    case "htmlinnertext":
                        if (args.Length < 4)
                        {
                            throw new UsageException("htmlInnerText requires an input file, output file, and column identifier");
                        }
                        Trace.WriteLine(String.Format("Converting Html to Text in \"{2}\" from \"{0}\" into \"{1}\"...", args[1], args[2], args[3]));
                        HtmlInnerText(args[1], args[2], args[3]);
                        break;

                    case "where":
                        if (args.Length < 3)
                        {
                            throw new UsageException("where requires input, column, operator, value");
                        }
                        Where(args[1], args[2], args[3], args[4], (args.Length > 5 ? args[5] : null));
                        break;

                    default:
                        throw new NotSupportedException(String.Format("XSV mode \"{0}\" is unknown. Run without arguments to see valid modes.", mode));
                    }
                }

                return(0);
            }
            catch (UsageException ex)
            {
                Trace.WriteLine(ex.Message);
                Trace.WriteLine(Usage);
                return(-2);
            }
            catch (Exception ex) when(!Debugger.IsAttached)
            {
                Trace.WriteLine("ERROR: " + ex.ToString());
                return(-1);
            }
        }