Beispiel #1
0
        private async static Task FillDataTableFromCSVFileThenWriteSomeToStringAsynchronously()
        {
            #region FillDataTableFromCSVFileThenWriteSomeToStringAsynchronously

            var table = new DataTable();

            using (var streamReader = new StreamReader("PlanetaryData.csv"))
            using (var reader = new CsvReader(streamReader))
            {
                await reader.ReadHeaderRecordAsync();
                await table.FillAsync(reader);
            }

            using (var stringWriter = new StringWriter())
            {
                using (var writer = new CsvWriter(stringWriter))
                {
                    await table.WriteCsvAsync(writer, false, 5);
                }

                Console.WriteLine("CSV: {0}", stringWriter);
            }

            #endregion
        }
        public async Task write_csv_async_returns_number_of_records_written()
        {
            using (var writer = new CsvWriter(new StringWriter()))
            {
                writer.WriteRecord("some", "record");

                var dataTable = new DataTable();
                dataTable.Columns.Add("First");
                dataTable.Columns.Add("Second");
                dataTable.Rows.Add("1", "2");
                dataTable.Rows.Add("3", "4");
                dataTable.Rows.Add("5", "6");

                Assert.Equal(3, await dataTable.WriteCsvAsync(writer, false));
                Assert.Equal(3, await dataTable.WriteCsvAsync(writer, true));
            }
        }
        public async Task write_csv_async_works_with_large_data_table_input()
        {
            var dataTable = new DataTable();
            dataTable.Columns.Add("First");
            dataTable.Columns.Add("Second");

            for (var i = 0; i < 1000; ++i)
            {
                dataTable.Rows.Add("value0_" + i, "value1_" + i);
            }

            // write less than all available records
            using (var writer = new CsvWriter(new StringWriter()))
            {
                Assert.Equal(913, await dataTable.WriteCsvAsync(writer, true, 913));
            }

            // write exactly available records
            using (var writer = new CsvWriter(new StringWriter()))
            {
                Assert.Equal(1000, await dataTable.WriteCsvAsync(writer, true, 1000));
            }

            // attempt to write more than available records
            using (var writer = new CsvWriter(new StringWriter()))
            {
                Assert.Equal(1000, await dataTable.WriteCsvAsync(writer, true, 1500));
            }
        }
        public async Task write_csv_async_object_to_string_converter_converts_nulls_to_empty_string()
        {
            using (var stringWriter = new StringWriter())
            using (var writer = new CsvWriter(stringWriter))
            {
                writer.NewLine = "<EOL>";

                var dataTable = new DataTable();
                dataTable.Columns.Add("First");
                dataTable.Columns.Add("Second");
                dataTable.Rows.Add("1", 2);
                dataTable.Rows.Add(null, 4d);
                dataTable.Rows.Add(5m, null);

                Assert.Equal(3, await dataTable.WriteCsvAsync(writer));
                Assert.Equal("First,Second<EOL>1,2<EOL>,4<EOL>5,<EOL>", stringWriter.ToString());
            }
        }
        public async Task write_csv_async_uses_object_to_string_converter_to_convert_objects_in_data_row_to_string()
        {
            using (var stringWriter = new StringWriter())
            using (var writer = new CsvWriter(stringWriter))
            {
                writer.NewLine = "<EOL>";

                var dataTable = new DataTable();
                dataTable.Columns.Add("First");
                dataTable.Columns.Add("Second");
                dataTable.Rows.Add("1", 2);
                dataTable.Rows.Add(3, 4d);
                dataTable.Rows.Add(5m, 6f);

                Assert.Equal(3, await dataTable.WriteCsvAsync(writer, true, null, o => o.ToString() + "_SUFFIX"));
                Assert.Equal("First,Second<EOL>1_SUFFIX,2_SUFFIX<EOL>3_SUFFIX,4_SUFFIX<EOL>5_SUFFIX,6_SUFFIX<EOL>", stringWriter.ToString());
            }
        }
        public async Task write_csv_async_stops_if_it_reaches_maximum_rows()
        {
            using (var stringWriter = new StringWriter())
            using (var writer = new CsvWriter(stringWriter))
            {
                writer.NewLine = "<EOL>";

                var dataTable = new DataTable();
                dataTable.Columns.Add("First");
                dataTable.Columns.Add("Second");
                dataTable.Rows.Add("1", "2");
                dataTable.Rows.Add("3", "4");
                dataTable.Rows.Add("5", "6");

                Assert.Equal(2, await dataTable.WriteCsvAsync(writer, true, 2));
                Assert.Equal("First,Second<EOL>1,2<EOL>3,4<EOL>", stringWriter.ToString());
            }
        }
        public async Task write_csv_async_writes_all_rows_as_data_records()
        {
            using (var stringWriter = new StringWriter())
            using (var writer = new CsvWriter(stringWriter))
            {
                writer.NewLine = "<EOL>";

                var dataTable = new DataTable();
                dataTable.Columns.Add("First");
                dataTable.Columns.Add("Second");
                dataTable.Rows.Add("1", "2");
                dataTable.Rows.Add("3", "4");
                dataTable.Rows.Add("5", "6");

                Assert.Equal(3, await dataTable.WriteCsvAsync(writer, true));
                Assert.Equal("First,Second<EOL>1,2<EOL>3,4<EOL>5,6<EOL>", stringWriter.ToString());
            }
        }
        public async Task write_csv_async_writes_a_header_record_based_on_data_table_column_names_if_requested()
        {
            using (var stringWriter = new StringWriter())
            using (var writer = new CsvWriter(stringWriter))
            {
                writer.NewLine = "<EOL>";

                var dataTable = new DataTable();
                dataTable.Columns.Add("First");
                dataTable.Columns.Add("Second");

                Assert.Equal(0, await dataTable.WriteCsvAsync(writer, true));
                Assert.Equal("First,Second<EOL>", stringWriter.ToString());
            }
        }