Пример #1
0
        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;
        }
Пример #2
0
        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);
        }
Пример #3
0
 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>();
 }
Пример #4
0
 public CsvColumnMap(IList <string> columnNames)
 {
     this = new CsvColumnMap(columnNames, true);
 }
Пример #5
0
 protected virtual CsvRow CreateCsvRow(int index, IList <string> data, CsvColumnMap columnMap)
 {
     return(new CsvRow(index, data, columnMap));
 }