예제 #1
0
        public void Load(TextReader input)
        {
            var adapter = new CSVAdapter();
            adapter.Load(input, ',');

            if (adapter.Rows.Count == 0)
            {
                _TicketStati.Clear();
                return;
            }

            if (adapter.RowLength != 3)
                throw new FormatException(String.Format("Numero di colonne incompatibile. Trovato: {0}; Previsto: 3", adapter.RowLength));

            var data = (
                from row in adapter.Rows
                select new TicketStatus(
                    Int32.Parse(row[0]),
                    DateTime.Parse(row[1]),
                    (Level)Int32.Parse(row[2])
                ))
                //Con questo passaggio, materializzo l'enumerable e verifico non siano presenti chiavi duplicate
                .ToDictionary(x => x.TicketNumber);

            _TicketStati.Clear();

            foreach (var status in data)
                _TicketStati.Add(status.Value);
        }
예제 #2
0
        public static MailingList LoadFromCSV(TextReader source)
        {
            var adapter = new CSVAdapter();
            adapter.Load(source, ',');

            if (adapter.Rows.Count < 1)
                throw new FormatException("La mailing list è priva di righe");
            if (adapter.RowLength != 6)
                throw new FormatException("Il numero di campi nel CSV Non è corretto: " + adapter.RowLength);

            var usersData = adapter.Rows
                .Select(x => new
                {
                    Utenza = x[0],
                    Gruppo = x[1],
                    Ruolo = x[2],
                    Nome = x[3],
                    Cognome = x[4],
                    Mail = x[5],
                });

            var dictionary = new Dictionary<string, IUser>(adapter.Rows.Count);
            foreach (var tupla in usersData)
            {
                try
                {
                    var mail = new System.Net.Mail.MailAddress(tupla.Mail);

                    //i named parameters sono una feature di C# 4.0 (Visual Studio 2010+)
                    dictionary.Add(tupla.Utenza,
                        new User(
                            /*utenza : */tupla.Utenza,
                            /*gruppo : */tupla.Gruppo,
                            /*ruolo : */tupla.Ruolo,
                            /*nome : */tupla.Nome,
                            /*cognome : */tupla.Cognome,
                            /*mail : */mail
                        )
                    );
                }
                catch(Exception e)
                {
                    throw new FormatException("Errore nella conversione della riga.\r\nVedere l'eccezione interna per ulteriori dettagli.", e);
                }
            }

            return new MailingList(dictionary);
        }
예제 #3
0
        public void Save(TextWriter output)
        {
            var adapter = new CSVAdapter();

            var data =
                from status in _TicketStati
                select new string[]
                {
                    status.TicketNumber.ToString(),
                    status.DateSent.ToString(),
                    ((int)status.LevelSent).ToString(),
                };

            foreach (var row in data)
                adapter.Rows.Add(row);

            adapter.Save(output, ',');
        }