Exemplo n.º 1
0
        public static WorkflowFile LoadFromDbfFile(string filePath, DbfLoadingOptions options)
        {
            CheckExtension(filePath, ".dbf");

            var content = new XDocument();

            content.Add(new XElement(options.XmlRootName));

            using (var fileStream = ReadFile(filePath))
            {
                var parser = new Dbf(options.FileEncoding);
                parser.Read(fileStream);

                // Parse headers
                var headers = ParserBase.GetCleanHeaders(parser.Fields.Select(field => field.Name).ToArray());

                for (int row = 0; row < parser.Records.Count; row++)
                {
                    var node = new XElement("Item");
                    content.Add(node);

                    for (int column = 0; column < parser.Records[row].Data.Count; column++)
                    {
                        if (parser.Records[row].Data[column] == null)
                        {
                            node.Add(new XElement(headers[column], "null"));

                            continue;
                        }

                        node.Add(new XElement(headers[column], parser.Records[row].Data[column].ToString()));
                    }
                }
            }

            return(new WorkflowFile(filePath, content));
        }
Exemplo n.º 2
0
        public static WorkflowFile LoadFromCsvFile(string filePath, CsvLoadingOptions options)
        {
            CheckExtension(filePath, ".csv");

            var content = new XDocument();

            content.Add(new XElement(options.XmlRootName));

            using (var fileStream = ReadFile(filePath))
            {
                using (var parser = new TextFieldParser(fileStream, options.FileEncoding))
                {
                    parser.Delimiters = new[] { options.Delimiter };

                    var headers = new List <string>();

                    // Parse headers
                    if (options.FirstLineHeaders)
                    {
                        headers.AddRange(ParserBase.GetCleanHeaders(parser.ReadFields()));
                    }

                    var firstLine = parser.ReadFields();

                    // Generate predefined headers
                    if (headers.Count == 0)
                    {
                        headers.AddRange(Enumerable.Range(0, firstLine.Length)
                                         .Select(i => $"F{i}"));
                    }
                    // first line doesn't contain headers, so create Item from it
                    else
                    {
                        var node = new XElement("Item");
                        content.Root.Add(node);

                        Enumerable.Range(0, firstLine.Length)
                        .ToList()
                        .ForEach(i =>
                        {
                            node.Add(new XElement(headers[i], firstLine[i]));
                        });
                    }

                    // parse rest lines
                    while (!parser.EndOfData)
                    {
                        var fields = parser.ReadFields();

                        var node = new XElement("Item");
                        content.Root.Add(node);

                        Enumerable.Range(0, fields.Length)
                        .ToList()
                        .ForEach(i =>
                        {
                            node.Add(new XElement(headers[i], firstLine[i]));
                        });
                    }

                    return(new WorkflowFile(filePath, content));
                }
            }
        }