Esempio n. 1
0
        /// <summary>
        /// Read a file as CSV, using specific behaviour, layout and conversion options.
        /// </summary>
        /// <param name="path">The full or relative path name</param>
        /// <param name="encoding">The encoding of the file.</param>
        /// <param name="quote">The quote character. Default '"'</param>
        /// <param name="delimiter">Field delimiter. Default ','</param>
        /// <param name="escape">Quote escape character (for quotes inside fields). Default '\'</param>
        /// <param name="comment">Comment marker. Default '#'</param>
        /// <param name="hasHeaders">Is the first line a header line (default false)?</param>
        /// <param name="trimmingOptions">How should fields be trimmed?</param>
        /// <param name="missingFieldAction">What should happen when a field is missing from a line?</param>
        /// <param name="skipEmptyLines">Should empty lines be skipped?</param>
        /// <param name="quotesInsideQuotedFieldAction">What should happen when a quote is found inside a quoted field?</param>
        /// <param name="cultureInfo">Culture info to be used for parsing culture-sensitive data (such as date/time and decimal numbers)</param>
        /// <returns>a DataReader instance to read the contents of the CSV file</returns>
        public static IEnumerable <T> FromString <T>(
            string input,
            char quote      = '"',
            char delimiter  = ',',
            char escape     = '"',
            char comment    = '#',
            bool hasHeaders = false,
            ValueTrimmingOptions trimmingOptions  = ValueTrimmingOptions.UnquotedOnly,
            MissingFieldAction missingFieldAction = MissingFieldAction.ParseError,
            bool skipEmptyLines = true,
            QuotesInsideQuotedFieldAction quotesInsideQuotedFieldAction = QuotesInsideQuotedFieldAction.Ignore,
            CultureInfo cultureInfo = null)
        {
            var schema = new CsvSchemaBuilder(cultureInfo).From <T>().Schema;

            return(FromString(
                       input,
                       quote,
                       delimiter,
                       escape,
                       comment,
                       hasHeaders,
                       trimmingOptions,
                       missingFieldAction,
                       skipEmptyLines,
                       quotesInsideQuotedFieldAction,
                       schema,
                       cultureInfo)
                   .AsEnumerable <T>());
        }
Esempio n. 2
0
    public void WhenSchemaCreatedFromClass_ExpectedValuesAreReturned()
    {
        CsvSchema schema = new CsvSchemaBuilder().From <MyClass>().Schema;

        var item = ReadCsv
                   .FromString(input, delimiter: ';', hasHeaders: true, schema: schema)
                   .AsEnumerable <MyClass>()
                   .Single();

        Verify(item);
    }
Esempio n. 3
0
        public void WriteCsv_ReadBack_ReturnsExpectedResult()
        {
            var cultureInfo = CultureInfo.CreateSpecificCulture("be");
            var schema      = new CsvSchemaBuilder(cultureInfo).From <Item>().Schema;
            var result      = WriteCsv.ToString(new[] { new Item {
                                                            Value = 123.5m
                                                        } }, cultureInfo: cultureInfo);

            Assert.AreEqual($"\"123,5\"{NewLine}", result);
            var readback = ReadCsv.FromString(result, schema: schema).AsEnumerable <Item>().Single().Value;

            Assert.AreEqual(123.5m, readback);
        }
Esempio n. 4
0
    public void WithSchemaFromClass_CanReturnAsDynamicWithType()
    {
        CsvSchema schema = new CsvSchemaBuilder()
                           .From <MyClass>()
                           .Schema;

        var item = ReadCsv
                   .FromString(input, delimiter: ';', hasHeaders: true, schema: schema)
                   .AsEnumerable(typeof(MyClass))
                   .Single();

        Verify(item);
    }
Esempio n. 5
0
    public void WithSchemaFromClassWithColumnsInOtherOrder_CanReturnAsDynamicWithType()
    {
        CsvSchema schema = new CsvSchemaBuilder()
                           .From <MyClass>()
                           .Schema;
        var input =
            "Last;First;BirthDate;Quantity;Price;Count;LargeValue;SomeDateTimeOffset;IsActive;NullableCustom\r\n" +
            "\"Peters\";John;19701115;123;US$ 5.98;;2147483647;2020-11-13T10:20:30.0000000+02:00;yes;\r\n";


        var item = ReadCsv
                   .FromString(input, delimiter: ';', hasHeaders: true, schema: schema)
                   .AsEnumerable(typeof(MyClass))
                   .Single();

        Verify(item);
    }
Esempio n. 6
0
        private readonly string _endpoint;// = "http://acornbox.webui";



        void IGenerateSchema.GenerateSchema(Guid id)
        {
            System.Threading.Thread.Sleep(60 * 1000);


            string resourceUrl = _endpoint + $"/api/FileEntry/{id}";

            FileEntryDto fileEntry;

            try
            {
                fileEntry = resourceUrl.GetJsonAsync <FileEntryDto>()
                            .GetAwaiter()
                            .GetResult();
            }
            catch (FlurlHttpException ex)
            {
                throw;
            }


            using FileStream fs       = new FileStream(fileEntry.Path, FileMode.Open, FileAccess.Read, FileShare.Read);
            using StreamReader sr     = new StreamReader(fs, Encoding.Default, true);
            using CsvReader csvReader = new CsvReader(sr);
            CsvSchemaBuilder csvSchemaBuilder = new CsvSchemaBuilder(csvReader.HeaderRecord);

            csvSchemaBuilder.Refine(csvReader);

            CsvSchema csvSchema = csvSchemaBuilder.Build();

            string csvSchemaStr = Newtonsoft.Json.JsonConvert.SerializeObject(csvSchema, Newtonsoft.Json.Formatting.Indented);

            fileEntry.Schema = csvSchemaStr;

            fileEntry.GenerateSchemaWorker = Environment.MachineName;

            try
            {
                resourceUrl.PutJsonAsync(fileEntry).GetAwaiter().GetResult();
            }
            catch (FlurlHttpException ex)
            {
                throw;
            }
        }
Esempio n. 7
0
    public void WithSchema_CanReturnAsDynamicAndAllPropertiesAreTyped()
    {
        CsvSchema schema = new CsvSchemaBuilder()
                           .AddString(nameof(MyRecord.First))
                           .Add(nameof(MyRecord.Last), s => new Custom(s), false)
                           .AddDateTime(nameof(MyRecord.BirthDate), "yyyyMMdd")
                           .AddInt32(nameof(MyRecord.Quantity))
                           .Add(nameof(MyRecord.Price), s => Amount.Parse(s, CultureInfo.InvariantCulture), false)
                           .AddInt16(nameof(MyRecord.Count))
                           .AddDecimal(nameof(MyRecord.LargeValue))
                           .AddDateTimeOffset(nameof(MyRecord.SomeDateTimeOffset))
                           .AddBoolean(nameof(MyRecord.IsActive), "yes", "no")
                           .Add(nameof(MyRecord.NullableCustom), s => new Custom(s), true)
                           .Schema;

        var item = ReadCsv
                   .FromString(input, delimiter: ';', hasHeaders: true, schema: schema)
                   .AsEnumerable()
                   .Single();

        Verify(item);
    }