private void WriteToFile(TextWriter writer, IEnumerable <string[]> records, string[] headers, char delimiter, string EOLDelimiter, char quoteChar, QuoteAllFields quoteAllFields = QuoteAllFields.None) { this.Validate(delimiter, EOLDelimiter, quoteChar); if (EOLDelimiter.IsNullOrEmpty()) { EOLDelimiter = Environment.NewLine; } string doubleQuotesText = $"{quoteChar}{quoteChar}"; string quotesText = $"{quoteChar}"; int index = 0; int lineNo = 0; foreach (var rec in records) { if (index == 0) { if (!headers.IsNullOrEmpty()) { WriteRec(writer, delimiter, EOLDelimiter, quoteChar, doubleQuotesText, quotesText, headers, lineNo, (quoteAllFields & QuoteAllFields.HeaderOnly) == QuoteAllFields.HeaderOnly); lineNo++; } } WriteRec(writer, delimiter, EOLDelimiter, quoteChar, doubleQuotesText, quotesText, rec, lineNo, (quoteAllFields & QuoteAllFields.DataOnly) == QuoteAllFields.DataOnly); lineNo++; index++; } writer.Flush(); }
public void Write <T>(StringBuilder sb, IEnumerable <T> records, string[] headers = null, char delimiter = ',', string EOLDelimiter = null, char quoteChar = '\"', Action <int, T, IList <string> > mapper = null, QuoteAllFields quoteAllFields = QuoteAllFields.None) where T : new() { if (sb == null) { throw new ArgumentException("Invalid StringBuilder passed."); } Write(new StringWriter(sb), records, headers, delimiter, EOLDelimiter, quoteChar, mapper, quoteAllFields); }
public void Write <T>(TextWriter writer, IEnumerable <T> records, string[] headers = null, char delimiter = ',', string EOLDelimiter = null, char quoteChar = '\"', Action <int, T, IList <string> > mapper = null, QuoteAllFields quoteAllFields = QuoteAllFields.None) where T : new() { if (writer == null) { throw new ArgumentException("Invalid stream writer passed."); } this.Validate <T>(); var @this = this; var recEnum = records.GetEnumerator(); if (headers.IsNullOrEmpty()) { T firstRec = default(T); if (GetFirstNotNullRecord(recEnum, ref firstRec)) { headers = this.GetHeaders(firstRec); } WriteToFile(writer, GetRecords(firstRec, recEnum).Select((rec, index) => { IList <string> cols = new List <string>(); if (mapper == null) { @this.GetValues(rec, cols); } else { mapper(index, rec, cols); } return(cols.ToArray()); }), headers, delimiter, EOLDelimiter, quoteChar, quoteAllFields); } else { WriteToFile(writer, records.Select((rec, index) => { IList <string> cols = new List <string>(); if (mapper == null) { @this.GetValues(rec, cols); } else { mapper(index, rec, cols); } return(cols.ToArray()); }), headers, delimiter, EOLDelimiter, quoteChar, quoteAllFields); } }
public void WriteFile <T>(string filename, IEnumerable <T> records, string[] headers = null, char delimiter = ',', string EOLDelimiter = null, char quoteChar = '\"', Action <int, T, IList <string> > mapper = null, QuoteAllFields quoteAllFields = QuoteAllFields.None) where T : new() { if (filename.IsNullOrWhiteSpace()) { throw new ArgumentException("Invalid filename passed."); } using (FileStream f = new FileStream(filename, FileMode.Create, FileAccess.Write)) { using (StreamWriter s = new StreamWriter(f)) { Write <T>(s, records, headers, delimiter, EOLDelimiter, quoteChar, mapper, quoteAllFields); } } }
public void Write <T>(StreamWriter writer, IEnumerable <T> records, string[] headers = null, char delimiter = ',', string EOLDelimiter = null, char quoteChar = '\"', Action <int, T, IList <string> > mapper = null, QuoteAllFields quoteAllFields = QuoteAllFields.None) where T : new() { Write(writer as TextWriter, records, headers, delimiter, EOLDelimiter, quoteChar, mapper, quoteAllFields); }
public void Write(TextWriter writer, IEnumerable <string[]> records, string[] headers = null, char delimiter = ',', string EOLDelimiter = null, char quoteChar = '\"', QuoteAllFields quoteAllFields = QuoteAllFields.None) { if (writer == null) { throw new ArgumentException("Invalid stream writer passed."); } this.Validate(delimiter, EOLDelimiter, quoteChar); WriteToFile(writer, records, headers, delimiter, EOLDelimiter, quoteChar, quoteAllFields); }
public void Write(StreamWriter writer, IEnumerable <string[]> records, string[] headers = null, char delimiter = ',', string EOLDelimiter = null, char quoteChar = '\"', QuoteAllFields quoteAllFields = QuoteAllFields.None) { Write(writer as TextWriter, records, headers, delimiter, EOLDelimiter, quoteChar, quoteAllFields); }