/// <summary> /// Create a Delimiter-Separated Value representation of a DataTable. (CSV by default.) /// </summary> /// <param name="dt">The DataTable.</param> /// <param name="separator">Optional delimiter.</param> /// <param name="quotingchar">Optional text qualifier.</param> /// <param name="linebreakreplacement">Optional character by which to replace newlines.</param> /// <returns>String containing a DSV representation of the DataTable</returns> public static String dataTableToDSV(DataTable dt, char separator = ',', char?quotingchar = '"', char?linebreakreplacement = null) { StringBuilder sb = new StringBuilder(); if (dt != null) { // set up the function to prepare the raw data for embedment in CSV Func <String, String> CSVify; if (quotingchar == null) { if (linebreakreplacement == null) { CSVify = (String s) => s; } else { CSVify = (String s) => Newlines.escapeNewlines(s, linebreakreplacement.ToString()); } } else { String quotingString = quotingchar.ToString(); String escapedQuote = String.Concat(quotingchar, quotingchar); if (linebreakreplacement == null) { CSVify = (String s) => s.Replace(quotingString, escapedQuote); } else { CSVify = (String s) => Newlines.escapeNewlines(s, linebreakreplacement.ToString()).Replace(quotingString, escapedQuote); } } // set up some useful variables String colSeparator = String.Concat(quotingchar, separator, quotingchar); int trailingLength = String.Concat(separator, quotingchar).Length; // string together the headers sb.Append(quotingchar); for (int col = 0; col < dt.Columns.Count; col++) { sb.Append(CSVify(dt.Columns[col].ColumnName)); sb.Append(colSeparator); } sb.Remove(sb.Length - trailingLength, trailingLength); sb.AppendLine(); // collate all rows for (int row = 0; row < dt.Rows.Count; row++) { sb.Append(quotingchar); for (int col = 0; col < dt.Columns.Count; col++) { sb.Append(CSVify(dt.Rows[row][col].ToString())); sb.Append(colSeparator); } sb.Remove(sb.Length - trailingLength, trailingLength); sb.AppendLine(); } } return(sb.ToString()); }
private static Parser <char, JassCompilationUnitSyntax> GetCompilationUnitParser() { return(Newlines.Optional().Then(DeclarationParser.Many()).Then(FunctionParser.Many(), (declarations, functions) => new JassCompilationUnitSyntax(declarations.ToImmutableArray(), functions.ToImmutableArray())) .Before(End)); }