/// <summary> /// Parse input stream into contacts while collecting /// parsing errors. /// </summary> /// <returns></returns> public List<Logic.Entities.Contact> Parse() { int lineNumber = 0; using (StreamReader reader = new StreamReader(stream)) { string line; char separator = ';'; while ((line = reader.ReadLine()) != null) { ++lineNumber; line = line.Trim(); // Choose field separator if (lineNumber == 1) { if (line.IndexOf(';') == -1) { separator = ','; // Common in Scandinavian countries } string[] titles = line.Split(separator); if (titles.Length != 5) { errors.Add(new ParsingError(lineNumber, line, String.Format("Expected 5 title fields, got {0}, stopping", titles.Length))); break; } } else { if (line.Length == 0) // Ignore empty lines { continue; } string[] fields = line.Split(separator); if (fields.Length != 5) { errors.Add(new ParsingError(lineNumber, line, String.Format("Expected 5 fields, got {0}", fields.Length))); continue; } for (int i = 0; i < fields.Length; i++) { fields[i] = fields[i].Trim(); } // Fill in contact Logic.Entities.Contact contact = new Logic.Entities.Contact(); contact.Title = fields[0]; contact.FirstName = fields[1]; contact.LastName = fields[2]; contact.Email = fields[3]; contact.MobilePhone = fields[4]; contacts.Add(contact); } // No title row if (lineNumber == 0) { errors.Add(new ParsingError(1, string.Empty, "No data rows in uploaded file")); } } } return contacts; }
private bool ValidateContacts(out IList<Logic.Entities.Contact> list) { bool allValid = true; list = new List<Logic.Entities.Contact>(); foreach (RepeaterItem item in rptrContacts.Items) { TextBox tbTitle = (TextBox)item.FindControl("tbTitle"); TextBox tbFirstName = (TextBox)item.FindControl("tbFirstName"); TextBox tbLastName = (TextBox)item.FindControl("tbLastName"); TextBox tbEmail = (TextBox)item.FindControl("tbEmail"); TextBox tbPhone = (TextBox)item.FindControl("tbPhone"); Logic.Entities.Contact contact = new Logic.Entities.Contact(); contact.Title = tbTitle.Text.Trim(); contact.FirstName = tbFirstName.Text.Trim(); contact.LastName = tbLastName.Text.Trim(); contact.Email = tbEmail.Text.Trim(); contact.MobilePhone = tbPhone.Text.Trim(); // Validate List<string> validationMessages = new List<string>(); if (contact.FirstName == string.Empty) { validationMessages.Add("First name is required."); } if (contact.LastName == string.Empty) { validationMessages.Add("Second name is required."); } if (contact.Email == string.Empty) { validationMessages.Add("Email is required."); } else if (!patternEmail.Match(contact.Email).Success) { validationMessages.Add("Email has invalid format."); } if (contact.MobilePhone != string.Empty && !patternPhone.Match(contact.MobilePhone).Success) { validationMessages.Add("Phone must be composed of digits and other special characters."); } if (validationMessages.Count > 0) { HtmlTableRow trMessages = (HtmlTableRow)item.FindControl("trMessages"); HtmlContainerControl pMessage = (HtmlContainerControl)item.FindControl("pMessage"); allValid = false; trMessages.Visible = true; pMessage.InnerHtml = string.Join("<br/>", validationMessages.ToArray()); } else { list.Add(contact); } } return allValid; }