Exemplo n.º 1
0
        /// <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());
        }
Exemplo n.º 2
0
 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));
 }