示例#1
0
文件: Program.cs 项目: kiszu/ForBlog
        static void Main(string[] args)
        {
            CSVParser parser = new CSVParser("test.csv");


            //display unordered records from file.
            Console.WriteLine("Unordered");
            Console.WriteLine("Row Number\tFullName\t Number \t Date");
            foreach (var row in parser.Rows)
            {
                Console.WriteLine("{0}\t{1}\t{2}\t{3}", row.RowNumber, row.Cell[0].Value, row.Cell[1].Value, row.Cell[2].Value);
            }

            Console.WriteLine("press enter to continue");
            Console.ReadLine();


            //order by column 1 which is a string
            var orderedbycolumn0 = parser.Rows.OrderBy(i => (string)i.Cell[0]).ToList();
            Console.WriteLine("Order by Name");
            Console.WriteLine("Row Number\tFullName\t Number \t Date");
            foreach (var row in orderedbycolumn0)
            {
                Console.WriteLine("{0}\t{1}\t{2}\t{3}", row.RowNumber, row.Cell[0].Value, row.Cell[1].Value, row.Cell[2].Value);
            }

            Console.WriteLine("press enter to continue");
            Console.ReadLine();

            //order by column 2 which might be an int
            var orderedbycolumn2 = parser.Rows.OrderBy(i => (int?)i.Cell[1]).ToList();
            Console.WriteLine("Order by Number");
            Console.WriteLine("Row Number\tFullName\t Number \t Date");
            foreach (var row in orderedbycolumn2)
            {
                Console.WriteLine("{0}\t{1}\t{2}\t{3}", row.RowNumber, row.Cell[0].Value, row.Cell[1].Value, row.Cell[2].Value);
            }

            Console.WriteLine("press enter to continue");
            Console.ReadLine();

            //order by column 3 which might be an datetime
            var orderedbycolumn3 = parser.Rows.OrderBy(i => (DateTime?)i.Cell[2]).ToList();
            Console.WriteLine("Order by Date");
            Console.WriteLine("Row Number\tFullName\t Number \t Date");
            foreach (var row in orderedbycolumn3)
            {
                Console.WriteLine("{0}\t{1}\t{2}\t{3}", row.RowNumber, row.Cell[0].Value, row.Cell[1].Value, row.Cell[2].Value);
            }

            Console.WriteLine("press enter to continue");
            Console.ReadLine();
        }
示例#2
0
        public string Clean(string Parametri)
        {
            var result     = string.Empty;
            var parameters = Parametri.Split('§');

            if (parameters.Length == 0)
            {
                return("-ER - È necessario specificare il path del file csv");
            }

            //la funzione si aspetta in input il path del file seguito dal carattere § e il separatore del file CSV (di default è ;)
            string filename = Parametri.Split('§')[0];

            if (parameters.Length == 2)
            {
                //not implemented - per il momento utilizza solo il punto e virgola
                string separator = Parametri.Split('§')[1];
                result = @"-WG - La funzionalità di scelta del carattere separatore non è implementata. 
    Il separatore di Default è il punto e virgola";
            }

            try
            {
                var file = File.ReadAllText(filename);

                AntlrInputStream  inputStream = new AntlrInputStream(file);
                CSVLexer          lex         = new CSVLexer(inputStream);
                CommonTokenStream TokenStream = new CommonTokenStream(lex);
                CSVParser         par         = new CSVParser(TokenStream);

                CSVErrorListener el = new CSVErrorListener();
                par.RemoveErrorListeners();
                par.AddErrorListener(el);

                var csvContext = par.csvFile();

                if (el.SyntaxErrorsList.Count > 0)
                {
                    result += @"-ER - Nel file csv sono presenti righe con più colonne rispetto all'intestazione:
Righe Errate  ";
                    foreach (var se in el.SyntaxErrorsList)
                    {
                        result += se.Line + ", ";
                    }
                    result  = result.Remove(result.Length - 2);
                    result += "\n";
                    return(result);
                }

                CSVCleanerListener listener = new CSVCleanerListener(TokenStream);
                ParseTreeWalker    walker   = new ParseTreeWalker();
                walker.Walk(listener, csvContext);

                if (listener.shortRows)
                {
                    result += @"-ER - Nel file csv sono presenti righe con meno colonne rispetto all'intestazione\n";
                }

                if (listener.LogRows.Count != 0)
                {
                    result += @"-WG - Il file contiene righe vuote in fondo e/o separatori in eccesso a fine riga";
                    foreach (var row in listener.LogRows)
                    {
                        result += "\nRiga " + row.Key + " - " + row.Value;
                    }
                }

                //se non ci sono errori bloccanti sovrascrivo il file "pulito"
                if (!listener.shortRows && el.SyntaxErrorsList.Count == 0)
                {
                    File.WriteAllText(filename, listener.r.GetText());
                }
            }
            catch (IOException exIO)
            {
                return(" - ER - Errore in lettura o scrittura del file csv\n    " + exIO.Message);
            }
            catch (Exception e)
            {
                return("-ER - Errore non gestito: " + e.Message);
            }

            if (result.Equals(string.Empty))
            {
                result = "+OK";
            }

            return(result);
        }