public CsvFormatter(char delimiter, char quoteChar, char escapeChar, string endOfLine, CsvQuotingStyle quotingStyle, Encoding encoding = null) { _delimiter = delimiter; _quoteChar = quoteChar; _duplicatedQuote = new string(quoteChar, 2); _duplicatedEscape = new string(escapeChar, 2); _quoteOrEscapechar = new[] { quoteChar, escapeChar }; _needQuoteChars = new[] { '\r', '\n', delimiter }; _endOfLine = endOfLine; _endOfLineBs = ByteString.FromString(_endOfLine); _quotingStyle = quotingStyle; _encoding = encoding ?? Encoding.UTF8; }
/// <summary> /// Create a Flow for converting <see cref="IImmutableList{string}"/> to ByteString. /// </summary> /// <param name="delimiter">Value delimiter, defaults to comma</param> /// <param name="quoteChar">Quote character, defaults to double quote</param> /// <param name="escapeChar">Escape character, defaults to backslash</param> /// <param name="endOfLine">Line ending (default CR, LF)</param> /// <param name="quotingStyle">Quote all fields, or only fields requiring quotes (default)</param> /// <param name="encoding">Character encoding, defaults to UTF-8</param> /// <param name="byteOrderMark">Certain CSV readers (namely Microsoft Excel) require a Byte Order mark, defaults to None</param> public static Flow <ImmutableList <string>, ByteString, NotUsed> Format( char delimiter = Comma, char quoteChar = DoubleQuote, char escapeChar = Backslash, string endOfLine = "\r\n", CsvQuotingStyle quotingStyle = CsvQuotingStyle.Required, Encoding encoding = null, ByteString byteOrderMark = null) { var formatter = new CsvFormatter(delimiter, quoteChar, escapeChar, endOfLine, quotingStyle, encoding); if (byteOrderMark == null) { return(Flow.FromFunction <ImmutableList <string>, ByteString>(list => formatter.ToCsv(list)) .Named("CsvFormatting")); } return(Flow.FromFunction <ImmutableList <string>, ByteString>(list => formatter.ToCsv(list)) .Named("CsvFormatting") .Prepend(Source.Single(byteOrderMark))); }