コード例 #1
0
        private static IValueSource valueSourceFor(IEnumerable <string> values, CsvData headers, IColumnMapping mapping)
        {
            var data = new CsvData(values);

            return(headers == null
                       ? mapping.ValueSource(data)
                       : mapping.ValueSource(data, headers));
        }
コード例 #2
0
        private void processData <T>(TextReader reader, CsvData headers, CsvRequest <T> request)
        {
            var mapping = request.Mapping.As <IColumnMapping>();

            readUntilComplete(reader, tokens =>
            {
                var source = valueSourceFor(tokens, headers, mapping);
                var result = _resolver.BindModel(typeof(T), source);

                request.Callback(result.Value.As <T>());
                return(true);
            });
        }
コード例 #3
0
        private CsvData determineHeaders <T>(TextReader reader, CsvRequest <T> request)
        {
            CsvData headers = null;

            if (request.HeadersExist)
            {
                readUntilComplete(reader, tokens =>
                {
                    if (tokens.Any() && request.UseHeaderOrdering)
                    {
                        headers = new CsvData(tokens);
                    }
                    return(false);
                });
            }

            return(headers);
        }
コード例 #4
0
        IValueSource IColumnMapping.ValueSource(CsvData data, CsvData headers)
        {
            var mapping    = this.As <IColumnMapping>();
            var badColumns = new List <string>();

            var columns = headers
                          .Values
                          .Select(x => {
                var column = mapping.ColumnFor(x);
                if (column == null)
                {
                    badColumns.Add(x);
                }

                return(column);
            }).ToArray();

            if (badColumns.Any())
            {
                throw new CsvColumnException(badColumns);
            }

            return(data.ToValueSource(columns));
        }
コード例 #5
0
 IValueSource IColumnMapping.ValueSource(CsvData data)
 {
     return(data.ToValueSource(_columns));
 }