public IEnumerable <CsvRow> Read(Stream sourceStream, Encoding encoding, bool throwOnUnknownColumns, bool throwOnDuplicateColumns) { StreamReader sourceReader; if (encoding != null) { sourceReader = new StreamReader(sourceStream, encoding); } else { sourceReader = new StreamReader(sourceStream, true); } using (sourceReader) { using (CsvReader csvReader = new CsvReader(sourceReader, true)) { if (csvReader.Headers != null) { CsvColumnMap columnMap = this.CreateColumnMap(csvReader.Headers, throwOnUnknownColumns, throwOnDuplicateColumns); yield return(this.CreateCsvRow(0, csvReader.Headers, columnMap)); int index = 0; foreach (string[] data in csvReader.ReadRows()) { index++; CsvRow row = this.CreateCsvRow(index, data, columnMap); this.ValidateRow(row); yield return(row); } } } } yield break; }
public virtual CsvColumnMap CreateColumnMap(IList <string> columnNames, bool throwOnUnknownColumns, bool throwOnDuplicateColumns) { CsvColumnMap result = new CsvColumnMap(columnNames, throwOnDuplicateColumns); foreach (string text in this.RequiredColumns.Keys) { if (!result.Contains(text)) { throw new CsvRequiredColumnMissingException(text); } } foreach (string text2 in this.ProhibitedColumns) { if (result.Contains(text2)) { throw new CsvProhibitedColumnPresentException(text2); } } if (throwOnUnknownColumns) { HashSet <string> hashSet = new HashSet <string>(columnNames, StringComparer.OrdinalIgnoreCase); hashSet.ExceptWith(this.RequiredColumns.Keys); hashSet.ExceptWith(this.OptionalColumns.Keys); if (hashSet.Count > 0) { string columns = '"' + string.Join("\", \"", hashSet.ToArray <string>()) + '"'; throw new CsvUnknownColumnsException(columns, hashSet); } } return(result); }
public CsvRow(int index, IList <string> data, CsvColumnMap columnMap) { if (data.Count != columnMap.Count) { throw new CsvWrongNumberOfColumnsException(index, columnMap.Count, data.Count); } this.index = index; this.data = data; this.columnMap = columnMap; this.errors = new Dictionary <string, PropertyValidationError>(); }
public CsvColumnMap(IList <string> columnNames) { this = new CsvColumnMap(columnNames, true); }
protected virtual CsvRow CreateCsvRow(int index, IList <string> data, CsvColumnMap columnMap) { return(new CsvRow(index, data, columnMap)); }