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); }
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); }
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, ','); }