示例#1
0
        public async Task Binary()
        {
            using (var reader = File.OpenText("Data\\Binary.csv"))
            {
                var csv = await CsvDataReader.CreateAsync(reader);

                csv.Read();
                var    id     = csv.GetInt32(0);
                byte[] buffer = new byte[16];
                var    len    = csv.GetBytes(1, 0, buffer, 0, 2);
                Assert.Equal(2, len);
                len += csv.GetBytes(1, len, buffer, (int)len, 14);
                Assert.Equal(BinaryValue1.Length, len);
                var expected = Encoding.ASCII.GetBytes(BinaryValue1);
                Assert.Equal(expected, buffer.Take((int)len));
                csv.Read();

                var p = 0;
                len = 0;
                var sw = new StringWriter();
                while ((len = csv.GetBytes(1, p, buffer, 0, buffer.Length)) != 0)
                {
                    p += (int)len;
                    sw.Write(Encoding.ASCII.GetString(buffer, 0, (int)len));
                }
                var str = sw.ToString();
                Assert.Equal(BinaryValue2, str);
            }
        }
示例#2
0
        public async Task Simple()
        {
            using var csv = await CsvDataReader.CreateAsync("Data\\Simple.csv");

            Assert.Equal(4, csv.FieldCount);
            Assert.True(csv.HasRows);
            Assert.Equal(0, csv.RowNumber);
            Assert.Equal("Id", csv.GetName(0));
            Assert.Equal("Name", csv.GetName(1));
            Assert.Equal("Value", csv.GetName(2));
            Assert.Equal("Date", csv.GetName(3));
            Assert.True(await csv.ReadAsync());
            Assert.Equal(1, csv.RowNumber);
            Assert.Equal("1", csv[0]);
            Assert.Equal("John", csv[1]);
            Assert.Equal("Low", csv[2]);
            Assert.Equal("2000-11-11", csv[3]);
            Assert.True(await csv.ReadAsync());
            Assert.Equal(2, csv.RowNumber);
            Assert.Equal("2", csv[0]);
            Assert.Equal("Jane", csv[1]);
            Assert.Equal("High", csv[2]);
            Assert.Equal("1989-03-14", csv[3]);
            Assert.False(await csv.ReadAsync());
        }
示例#3
0
        public async Task NoHeaders()
        {
            using (var reader = File.OpenText("Data\\DataOnly.csv"))
            {
                var csv = await CsvDataReader.CreateAsync(reader, new CsvDataReaderOptions { HasHeaders = false });

                Assert.Equal(4, csv.FieldCount);
                Assert.True(csv.HasRows);
                Assert.Equal(0, csv.RowNumber);
                Assert.Equal("", csv.GetName(0));
                Assert.Throws <IndexOutOfRangeException>(() => csv.GetOrdinal("Id"));
                Assert.True(await csv.ReadAsync());
                Assert.Equal(1, csv.RowNumber);
                Assert.Equal("1", csv[0]);
                Assert.Equal("John", csv[1]);
                Assert.Equal("Low", csv[2]);
                Assert.Equal("2000-11-11", csv[3]);
                Assert.True(await csv.ReadAsync());
                Assert.Equal(2, csv.RowNumber);
                Assert.Equal("2", csv[0]);
                Assert.Equal("Jane", csv[1]);
                Assert.Equal("High", csv[2]);
                Assert.Equal("1989-03-14", csv[3]);
                Assert.False(await csv.ReadAsync());
            }
        }
示例#4
0
        public async Task Quoted()
        {
            using (var reader = File.OpenText("Data\\Quote.csv"))
            {
                var csv = await CsvDataReader.CreateAsync(reader);

                Assert.Equal(4, csv.FieldCount);
                Assert.True(csv.HasRows);
                Assert.Equal(0, csv.RowNumber);
                Assert.Equal("Id", csv.GetName(0));
                Assert.Equal("Name", csv.GetName(1));
                Assert.Equal("Value", csv.GetName(2));
                Assert.Equal("Date", csv.GetName(3));
                Assert.True(await csv.ReadAsync());
                Assert.Equal(1, csv.RowNumber);
                Assert.Equal("1", csv[0]);
                Assert.Equal("John", csv[1]);
                Assert.Equal("Very\r\nLow\r\n", csv[2]);
                Assert.Equal("2000-11-11", csv[3]);
                Assert.True(await csv.ReadAsync());
                Assert.Equal(2, csv.RowNumber);
                Assert.Equal("2", csv[0]);
                Assert.Equal("Jane", csv[1]);
                Assert.Equal("\"High\"", csv[2]);
                Assert.Equal("1989-03-14", csv[3]);
                Assert.False(await csv.ReadAsync());
            }
        }
示例#5
0
        public async Task SylvanSelect()
        {
            var tr = TestData.GetTextReader();
            var dr = await CsvDataReader.CreateAsync(tr);

            while (await dr.ReadAsync())
            {
                var id   = dr.GetInt32(0);
                var name = dr.GetString(10);
                var val  = dr.GetInt32(20);
            }
        }
示例#6
0
        public async Task Sylvan()
        {
            using var tr = TestData.GetTextReader();
            using var dr = await CsvDataReader.CreateAsync(tr);

            while (await dr.ReadAsync())
            {
                for (int i = 0; i < dr.FieldCount; i++)
                {
                    var s = dr.GetString(i);
                }
            }
        }
示例#7
0
        public async Task SylvanShare()
        {
            using var tr = TestData.GetTextReader();
            using var dr = await CsvDataReader.CreateAsync(tr);

            var hs = new HashSet <string>();

            while (await dr.ReadAsync())
            {
                for (int i = 0; i < dr.FieldCount; i++)
                {
                    var s = dr.GetString(i);
                    hs.Add(s);
                }
            }
        }
示例#8
0
        public async Task HeadersOnly(string data)
        {
            using (var reader = new StringReader(data))
            {
                var csv = await CsvDataReader.CreateAsync(reader);

                Assert.Equal(4, csv.FieldCount);
                Assert.False(csv.HasRows);
                Assert.Equal(0, csv.RowNumber);
                Assert.Equal("Id", csv.GetName(0));
                Assert.Equal("Name", csv.GetName(1));
                Assert.Equal("Value", csv.GetName(2));
                Assert.Equal("Date", csv.GetName(3));
                Assert.False(await csv.ReadAsync());
            }
        }
示例#9
0
        public async Task HeadersOnly()
        {
            using (var reader = File.OpenText("Data\\HeadersOnly.csv"))
            {
                var csv = await CsvDataReader.CreateAsync(reader);

                Assert.Equal(4, csv.FieldCount);
                Assert.False(csv.HasRows);
                Assert.Equal(0, csv.RowNumber);
                Assert.Equal("Id", csv.GetName(0));
                Assert.Equal("Name", csv.GetName(1));
                Assert.Equal("Value", csv.GetName(2));
                Assert.Equal("Date", csv.GetName(3));
                Assert.False(await csv.ReadAsync());
            }
        }
示例#10
0
        public async Task SylvanDeDupeReuse()
        {
            using var tr = TestData.GetTextReader();
            var opts = new CsvDataReaderOptions {
                StringFactory = pool
            };

            using var dr = await CsvDataReader.CreateAsync(tr, opts);

            while (await dr.ReadAsync())
            {
                for (int i = 0; i < dr.FieldCount; i++)
                {
                    var s = dr.GetString(i);
                }
            }
        }
示例#11
0
        public async Task PartialRecord()
        {
            using (var reader = File.OpenText("Data\\PartialRecord.csv"))
            {
                var csv = await CsvDataReader.CreateAsync(reader);

                Assert.Equal(4, csv.FieldCount);
                Assert.True(csv.HasRows);
                Assert.Equal(0, csv.RowNumber);
                Assert.True(await csv.ReadAsync());
                Assert.Equal(1, csv.RowNumber);
                Assert.Equal("1", csv[0]);
                Assert.Equal("John", csv[1]);
                Assert.False(csv.IsDBNull(2));
                Assert.Equal("Low", csv[2]);
                Assert.True(csv.IsDBNull(3));
                Assert.Equal("", csv[3]);
            }
        }
示例#12
0
        public async Task TestBig()
        {
            var    tr  = TestData.GetTextReader();
            string str = null;

            var csv = await CsvDataReader.CreateAsync(tr);

            while (await csv.ReadAsync())
            {
                var s = csv.GetString(0);
                var v = csv.GetInt32(0);
                var n = csv.GetString(10);

                for (int i = 0; i < csv.FieldCount; i++)
                {
                    str = csv.GetString(i);
                }
                var v1 = csv.GetInt32(20);
            }
            // there was previously a bug, where the last value was read as "103\n".
            Assert.Equal("103", str);
        }
示例#13
0
        public async Task BinaryValues()
        {
            using (var reader = File.OpenText("Data\\Binary.csv"))
            {
                var schema = new TypedCsvSchema();
                schema.Add(1, typeof(byte[]));
                var opts = new CsvDataReaderOptions()
                {
                    Schema = schema
                };
                var csv = await CsvDataReader.CreateAsync(reader, opts);

                csv.Read();
                var vals = new object[2];
                csv.GetValues(vals);
                var expected = Encoding.ASCII.GetBytes(BinaryValue1);
                Assert.Equal(expected, (byte[])vals[1]);
                csv.Read();
                csv.GetValues(vals);
                expected = Encoding.ASCII.GetBytes(BinaryValue2);
                Assert.Equal(expected, (byte[])vals[1]);
            }
        }
示例#14
0
 public async Task SylvanSchema()
 {
     using var tr = TestData.GetTextReader();
     using var dr = await CsvDataReader.CreateAsync(tr, new CsvDataReaderOptions { Schema = TestData.TestDataSchema });
     await ProcessDataAsync(dr);
 }
示例#15
0
 public void Create()
 {
     Assert.ThrowsAsync <ArgumentNullException>(() => CsvDataReader.CreateAsync((TextReader)null));
 }