예제 #1
0
        public override void Init(PipelineContext ctx, XmlNode node)
        {
            base.Init(ctx, node);
            headerOptions = node.ReadEnum("@headers", _HeaderOptions.False);
            String fieldNames = node.ReadStr("@fieldnames", null);

            initialFieldNames = createInitialFieldNames(fieldNames);
            if (initialFieldNames != null && headerOptions == _HeaderOptions.UseForFieldNames)
            {
                throw new BMNodeException(node, "Cannot specify both  fieldnames and headers=UseForFieldNames.");
            }

            //PW moeten op contextnode
            lenient = node.ReadEnum("@lenient", CsvLenientMode.False);
            trim    = node.ReadEnum("@trim", CsvTrimOptions.None);
            escChar = node.ReadStr("@escape", null);

            delimChar   = readChar(node, "@dlm", ',');
            quoteChar   = readChar(node, "@quote", '"');
            commentChar = readChar(node, "@comment", '#');
            startAt     = node.ReadInt("@startat", -1);

            String sort = node.ReadStr("@sort", null);

            if (sort != null)
            {
                oneBasedSortKey = interpretSortField(sort);
            }
        }
예제 #2
0
 /// <summary>
 /// Converts DataTable to CSV and write to file
 /// </summary>
 /// <param name="dt">Input DataTable to convert</param>
 /// <param name="path">Filepath to write to</param>
 /// <param name="delimiter">(Optional) - Seperator, i.e: ; , \t (tab)</param>
 /// <param name="hasHeaders">(Optional) - Include headers or not</param>
 /// <param name="trimOptions">(Optional) - Trim inside quotes, trim fields, don't trim</param>
 public static void ToCsvFile(
     DataTable dt,
     string path,
     char delimiter             = ',',
     bool hasHeaders            = true,
     bool quoteAllFields        = true,
     CsvTrimOptions trimOptions = CsvTrimOptions.TrimFields)
 {
     ToCsvFile(dt.AsEnumerable_Legacy(), path, delimiter, hasHeaders, quoteAllFields, trimOptions);
 }
예제 #3
0
 /// <summary>
 /// Write List to CSV file
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="obj"></param>
 /// <param name="path">Output filepath</param>
 /// <param name="delimiter">(Optional) - Seperator, i.e: ; , \t (tab)</param>
 /// <param name="hasHeaders">(Optional) -Include headers or not</param>
 /// <param name="trimOptions">(Optional) - Trim inside quotes, trim fields, don't trim</param>
 public static void ToCsvFile <T>(
     List <T> list,
     string path,
     char delimiter             = ',',
     bool hasHeaders            = true,
     bool quoteAllFields        = true,
     CsvTrimOptions trimOptions = CsvTrimOptions.TrimFields)
 {
     ToCsvFile(list.AsEnumerable <T>(), path, delimiter, hasHeaders, quoteAllFields, trimOptions);
 }
예제 #4
0
        /// <summary>
        /// Write IEnumerable object to CSV file
        ///
        /// More information available at: https://joshclose.github.io/CsvHelper/getting-started
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="path">Output filepath</param>
        /// <param name="delimiter">(Optional) - Seperator, i.e: ; , \t (tab)</param>
        /// <param name="hasHeaders">(Optional) -Include headers or not</param>
        /// <param name="trimOptions">(Optional) - Trim inside quotes, trim fields, don't trim</param>
        public static string ToCsvString <T>(
            IEnumerable <T> obj,
            char delimiter             = ',',
            bool hasHeaders            = true,
            bool quoteAllFields        = true,
            CsvTrimOptions trimOptions = CsvTrimOptions.TrimFields)
        {
            using (var stream = new MemoryStream())
                using (var reader = new StreamReader(stream))
                    using (var writer = new StreamWriter(stream))
                        using (var csv = new CsvWriter(writer))
                        {
                            csv.Configuration.HasHeaderRecord = hasHeaders;
                            csv.Configuration.Delimiter       = delimiter.ToString();

                            if (quoteAllFields)
                            {
                                csv.Configuration.ShouldQuote = (field, context) => true;
                            }

                            switch (trimOptions)
                            {
                            case CsvTrimOptions.None:
                                csv.Configuration.TrimOptions = TrimOptions.None;
                                break;

                            case CsvTrimOptions.TrimInsideQuotes:
                                csv.Configuration.TrimOptions = TrimOptions.InsideQuotes;
                                break;

                            case CsvTrimOptions.TrimFields:
                                csv.Configuration.TrimOptions = TrimOptions.Trim;
                                break;

                            default:
                                break;
                            }

                            csv.WriteRecords(obj);
                            writer.Flush();
                            stream.Position = 0;

                            return(reader.ReadToEnd());
                        }
        }
예제 #5
0
        /// <summary>
        /// Write IEnumerable object to CSV file
        ///
        /// More information available at: https://joshclose.github.io/CsvHelper/getting-started
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="path">Output filepath</param>
        /// <param name="delimiter">(Optional) - Seperator, i.e: ; , \t (tab)</param>
        /// <param name="hasHeaders">(Optional) -Include headers or not</param>
        /// <param name="trimOptions">(Optional) - Trim inside quotes, trim fields, don't trim</param>
        public static void ToCsvFile <T>(
            IEnumerable <T> obj,
            string path,
            char delimiter             = ',',
            bool hasHeaders            = true,
            bool quoteAllFields        = true,
            CsvTrimOptions trimOptions = CsvTrimOptions.TrimFields)
        {
            using (var writer = new StreamWriter(path))
                using (var csv = new CsvWriter(writer))
                {
                    csv.Configuration.HasHeaderRecord = hasHeaders;
                    csv.Configuration.Delimiter       = delimiter.ToString();

                    if (quoteAllFields)
                    {
                        csv.Configuration.ShouldQuote = (field, context) => true;
                    }

                    switch (trimOptions)
                    {
                    case CsvTrimOptions.None:
                        csv.Configuration.TrimOptions = TrimOptions.None;
                        break;

                    case CsvTrimOptions.TrimInsideQuotes:
                        csv.Configuration.TrimOptions = TrimOptions.InsideQuotes;
                        break;

                    case CsvTrimOptions.TrimFields:
                        csv.Configuration.TrimOptions = TrimOptions.Trim;
                        break;

                    default:
                        break;
                    }

                    csv.WriteRecords(obj);
                }
        }
예제 #6
0
        /// <summary>
        /// Reads CSV file and returns deserialised object T.
        /// Note, if the CSV file has no header, then be sure to include 'Index' attributes on your class properties. I.e:
        ///
        ///     public class Foo
        ///     {
        ///         [Index(0)]
        ///         public int Id { get; set; }
        ///
        ///         [Index(1)]
        ///         public string Name { get; set; }
        ///     }
        ///
        /// You can also map by a different header name to your class properties by adding the 'Name' attribute to your properties. I.e:
        ///
        ///     public class Foo
        ///     {
        ///         [Name("id")]
        ///          public int Id { get; set; }
        ///
        ///         [Name("name")]
        ///         public string Name { get; set; }
        ///     }
        ///
        /// Other attributes include:
        ///
        ///     [BooleanTrueValues("yes")]
        ///     [BooleanFalseValues("no")]
        ///     [Optional]
        ///     [Ignored]
        ///
        /// More information available at: https://joshclose.github.io/CsvHelper/getting-started
        ///
        /// </summary>
        /// <typeparam name="T">Type of object to deserialise to</typeparam>
        /// <param name="path">File path of CSV file</param>
        /// <param name="delimiter">(Optional) - Single character seperator, i.e: ";" "," "\t" (tab) or "auto" to try and detect</param>
        /// <param name="hasHeaders">(Optional) - Does the CSV file have headers or not?</param>
        /// <param name="ignoreQuotes">(Optional) - If true, quotation marks are treated like any other character</param>
        /// <param name="trimOptions">(Optional) - Trim inside quotes, trim fields, don't trim</param>
        /// <returns>IEnumerable result</returns>
        public static IEnumerable <T> CsvFileToEnumerableObject <T>(
            string path,
            string delimiter           = "auto",
            bool hasHeaders            = true,
            bool ignoreQuotes          = false,
            CsvTrimOptions trimOptions = CsvTrimOptions.TrimFields)
        {
            char selectedDelimeter;

            try
            {
                if (delimiter == "auto")
                {
                    string singleLine = string.Empty;

                    if (hasHeaders)
                    {
                        using (StreamReader readingFile = new StreamReader(path))
                        {
                            singleLine = readingFile.ReadLine();
                        }

                        selectedDelimeter = TryDetectDelimiter(new string[] { singleLine });
                    }
                    else
                    {
                        selectedDelimeter = TryDetectDelimiter(File.ReadAllLines(path));
                    }
                }
                else
                {
                    selectedDelimeter = delimiter.ToCharArray()[0];
                }
            }
            catch
            {
                selectedDelimeter = ',';
            }

            using (var reader = new StreamReader(path))
                using (var csv = new CsvReader(reader))
                {
                    csv.Configuration.HasHeaderRecord  = hasHeaders;
                    csv.Configuration.Delimiter        = selectedDelimeter.ToString();
                    csv.Configuration.IgnoreBlankLines = true;
                    csv.Configuration.IgnoreQuotes     = ignoreQuotes;

                    switch (trimOptions)
                    {
                    case CsvTrimOptions.None:
                        csv.Configuration.TrimOptions = TrimOptions.None;
                        break;

                    case CsvTrimOptions.TrimInsideQuotes:
                        csv.Configuration.TrimOptions = TrimOptions.InsideQuotes;
                        break;

                    case CsvTrimOptions.TrimFields:
                        csv.Configuration.TrimOptions = TrimOptions.Trim;
                        break;

                    default:
                        break;
                    }

                    return(csv.GetRecords <T>().ToList());
                }
        }