Esempio n. 1
0
 public CsvStateMachine(TextReader textReader, CsvLayout csvLayout, CsvBehaviour behaviour, bool debug = false)
 {
     _textReader = textReader;
     _csvLayout  = csvLayout;
     _behaviour  = behaviour;
     _debug      = debug;
     TransitionTo(BeginningOfLine);
 }
Esempio n. 2
0
        public void ValueTrimmingOptions_All_TrimsWhiteSpace()
        {
            var input     = "\" x \"";
            var behaviour = new CsvBehaviour(ValueTrimmingOptions.All);
            var result    = Split(input, new CsvLayout(), behaviour);

            Assert.AreEqual("x", result.Single());
        }
Esempio n. 3
0
        public void ValueTrimmingOptions_UnQuotedOnly_DoesNotTrimWhiteSpaceWhenQuoted()
        {
            var input     = "\" x \"";
            var behaviour = new CsvBehaviour(ValueTrimmingOptions.UnquotedOnly);
            var result    = Split(input, new CsvLayout(), behaviour);

            Assert.AreEqual(" x ", result.Single());
        }
Esempio n. 4
0
 public CsvDataReader(TextReader reader, CsvLayout csvLayout, CsvBehaviour csvBehaviour, IConverter converter)
 {
     _parser     = new CsvParser(reader, csvLayout, csvBehaviour);
     _header     = _parser.Header;
     _line       = null;
     _converter  = converter;
     _enumerator = _parser.GetEnumerator();
 }
Esempio n. 5
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;
 }
Esempio n. 6
0
    public CsvParser(TextReader textReader, CsvLayout layOut, CsvBehaviour behaviour)
    {
        _csvStateMachine = new CsvStateMachine(textReader, layOut, behaviour);
        _enumerator      = _csvStateMachine.Lines().GetEnumerator();
        _textReader      = textReader;

        var firstLine = Lines().FirstOrDefault();

        Header = (layOut, firstLine) switch
        {
            ({ HasHeaders : true }, firstLine : not null)
Esempio n. 7
0
        public CsvParser(TextReader textReader, CsvLayout layOut, CsvBehaviour behaviour, string defaultHeaderName = "Column")
        {
            _csvStateMachine   = new CsvStateMachine(textReader, layOut, behaviour);
            _enumerator        = _csvStateMachine.Lines().GetEnumerator();
            _layout            = layOut;
            _defaultHeaderName = defaultHeaderName ?? "Column";
            _textReader        = textReader;

            var firstLine = Lines().FirstOrDefault();

            if (_layout.HasHeaders && firstLine != null)
            {
                Header = new CsvHeader(firstLine.Fields, _defaultHeaderName);
            }
            else
            {
                _cachedLine = firstLine;
            }
        }
Esempio n. 8
0
    /// <summary>
    /// Read a string as CSV, using specific behaviour, layout and conversion options
    /// </summary>
    /// <param name="input">The CSV input</param>
    /// <param name="quote">The quote character. Default '"'</param>
    /// <param name="delimiter">Field delimiter. Default ','</param>
    /// <param name="escape">Quote escape character (for quotes inside fields). Default '\'</param>
    /// <param name="comment">Comment marker. Default '#'</param>
    /// <param name="hasHeaders">Is the first line a header line (default false)?</param>
    /// <param name="trimmingOptions">How should fields be trimmed?</param>
    /// <param name="missingFieldAction">What should happen when a field is missing from a line?</param>
    /// <param name="skipEmptyLines">Should empty lines be skipped?</param>
    /// <param name="quotesInsideQuotedFieldAction">What should happen when a quote is found inside a quoted field?</param>
    /// <param name="schema">The CSV schema.</param>
    /// <param name="cultureInfo">Culture info to be used for parsing culture-sensitive data (such as date/time and decimal numbers)</param>
    /// <returns>a DataReader instance to read the contents of the CSV file</returns>
    public static IDataReader FromString(
        string input,
        char quote      = '"',
        char delimiter  = ',',
        char escape     = '"',
        char comment    = '#',
        bool hasHeaders = false,
        ValueTrimmingOptions trimmingOptions  = ValueTrimmingOptions.None,
        MissingFieldAction missingFieldAction = MissingFieldAction.ParseError,
        bool skipEmptyLines = true,
        QuotesInsideQuotedFieldAction quotesInsideQuotedFieldAction = QuotesInsideQuotedFieldAction.Ignore,
        CsvSchema schema        = null,
        CultureInfo cultureInfo = null)
    {
        var reader    = new StringReader(input);
        var layout    = new CsvLayout(quote, delimiter, escape, comment, hasHeaders, schema);
        var behaviour = new CsvBehaviour(trimmingOptions, missingFieldAction, skipEmptyLines, quotesInsideQuotedFieldAction);

        return(FromReader(reader, layout, behaviour, cultureInfo));
    }
Esempio n. 9
0
    /// <summary>
    /// Read a file as CSV, using specific behaviour, layout and conversion options. Make sure to dispose the DataReader.
    /// </summary>
    /// <param name="path">The full or relative path name</param>
    /// <param name="encoding">The encoding of the file.</param>
    /// <param name="quote">The quote character. Default '"'</param>
    /// <param name="delimiter">Field delimiter. Default ','</param>
    /// <param name="escape">Quote escape character (for quotes inside fields). Default '\'</param>
    /// <param name="comment">Comment marker. Default '#'</param>
    /// <param name="hasHeaders">Is the first line a header line (default false)?</param>
    /// <param name="trimmingOptions">How should fields be trimmed?</param>
    /// <param name="missingFieldAction">What should happen when a field is missing from a line?</param>
    /// <param name="skipEmptyLines">Should empty lines be skipped?</param>
    /// <param name="quotesInsideQuotedFieldAction">What should happen when a quote is found inside a quoted field?</param>
    /// <param name="schema">The CSV schema.</param>
    /// <param name="cultureInfo">Culture info to be used for parsing culture-sensitive data (such as date/time and decimal numbers)</param>
    /// <returns>a DataReader instance to read the contents of the CSV file</returns>
    public static IDataReader FromFile(
        string path,
        Encoding encoding = null,
        char quote        = '"',
        char delimiter    = ',',
        char escape       = '"',
        char comment      = '#',
        bool hasHeaders   = false,
        ValueTrimmingOptions trimmingOptions  = ValueTrimmingOptions.UnquotedOnly,
        MissingFieldAction missingFieldAction = MissingFieldAction.ParseError,
        bool skipEmptyLines = true,
        QuotesInsideQuotedFieldAction quotesInsideQuotedFieldAction = QuotesInsideQuotedFieldAction.Ignore,
        CsvSchema schema        = null,
        CultureInfo cultureInfo = null)
    {
        // caller should dispose IDataReader, which will indirectly also close the stream
        var layout    = new CsvLayout(quote, delimiter, escape, comment, hasHeaders, schema);
        var behaviour = new CsvBehaviour(trimmingOptions, missingFieldAction, skipEmptyLines, quotesInsideQuotedFieldAction);
        var stream    = File.OpenRead(path);
        var reader    = new StreamReader(stream, encoding ?? Encoding.UTF8, encoding == null);

        return(FromReader(reader, layout, behaviour, cultureInfo));
    }
Esempio n. 10
0
        private static IEnumerable <string> Split(string line, CsvLayout splitLineParams, CsvBehaviour behaviour)
        {
            var splitter = new CsvStateMachine(new StringReader(line), splitLineParams, behaviour);
            var result   = splitter.Lines();

            return(result.First().Fields);
        }
Esempio n. 11
0
 public CsvLineBuilder(CsvLayout layout, CsvBehaviour behaviour)
 {
     _layout    = layout;
     _behaviour = behaviour;
 }
Esempio n. 12
0
 public CsvStateMachine(TextReader textReader, CsvLayout csvLayout, CsvBehaviour behaviour)
 {
     _textReader = textReader;
     _csvLayout  = csvLayout;
     _behaviour  = behaviour;
 }
Esempio n. 13
0
 internal static IDataReader FromReader(TextReader reader, CsvLayout csvLayout, CsvBehaviour csvBehaviour, CultureInfo cultureInfo = null)
 => new CsvDataReader(reader, csvLayout, csvBehaviour, cultureInfo);
Esempio n. 14
0
 private static IEnumerable<string> Split(string line, CsvLayout splitLineParams, CsvBehaviour behaviour)
 {
     var splitter = new BufferedCsvLineGenerator(new StringReader(line), splitLineParams, behaviour);
     var result = splitter.Split();
     return result.First().Fields;
 }