예제 #1
0
 public CsvDataReader(TextReader reader, CsvLayout csvLayout, CsvBehaviour csvBehaviour, CultureInfo cultureInfo)
 {
     _parser     = new CsvParser(reader, csvLayout, csvBehaviour);
     _header     = _parser.Header;
     _line       = null;
     _converter  = new Converter(cultureInfo ?? CultureInfo.InvariantCulture);
     _enumerator = _parser.GetEnumerator();
     _schema     = csvLayout.Schema;
 }
예제 #2
0
        public CsvReader(TextReader reader,
                         int bufferSize           = DefaultBufferSize,
                         CsvLayout layout         = null,
                         CsvBehaviour behaviour   = null,
                         string defaultHeaderName = null)
        {
            if (layout == null)
            {
                layout = CsvLayout.Default;
            }
            if (behaviour == null)
            {
                behaviour = CsvBehaviour.Default;
            }
            _line = CsvLine.Empty;

            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            if (bufferSize <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(bufferSize), bufferSize, ExceptionMessage.BufferSizeTooSmall);
            }

            BufferSize = bufferSize;

            if (reader is StreamReader streamReader)
            {
                Stream stream = streamReader.BaseStream;

                if (stream.CanSeek)
                {
                    // Handle bad implementations returning 0 or less
                    if (stream.Length > 0)
                    {
                        BufferSize = (int)Math.Min(bufferSize, stream.Length);
                    }
                }
            }

            CurrentRecordIndex = -1;

            _csvLayout  = layout;
            _behaviour  = behaviour;
            _parser     = new CsvParser(reader, _csvLayout, _behaviour, defaultHeaderName);
            _enumerator = _parser.GetEnumerator();
        }