public CsvStateMachine(TextReader textReader, CsvLayout csvLayout, CsvBehaviour behaviour, bool debug = false) { _textReader = textReader; _csvLayout = csvLayout; _behaviour = behaviour; _debug = debug; TransitionTo(BeginningOfLine); }
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()); }
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()); }
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(); }
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; }
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)
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; } }
/// <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)); }
/// <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)); }
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); }
public CsvLineBuilder(CsvLayout layout, CsvBehaviour behaviour) { _layout = layout; _behaviour = behaviour; }
public CsvStateMachine(TextReader textReader, CsvLayout csvLayout, CsvBehaviour behaviour) { _textReader = textReader; _csvLayout = csvLayout; _behaviour = behaviour; }
internal static IDataReader FromReader(TextReader reader, CsvLayout csvLayout, CsvBehaviour csvBehaviour, CultureInfo cultureInfo = null) => new CsvDataReader(reader, csvLayout, csvBehaviour, cultureInfo);
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; }