public void GetValuesTest() { var s = new StringBuilder(); s.AppendLine("Boolean,Byte,Bytes,Char,Chars,DateTime,Decimal,Double,Float,Guid,Short,Int,Long,Null"); s.AppendLine("true,1,0x0102,a,ab,1/1/2019,1.23,4.56,7.89,eca0c8c6-9a2a-4e6c-8599-3561abda13f1,1,2,3,null"); using (var reader = new StringReader(s.ToString())) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { csv.Configuration.Delimiter = ","; csv.Configuration.TypeConverterOptionsCache.GetOptions <string>().NullValues.Add("null"); var dataReader = new CsvDataReader(csv); dataReader.Read(); Assert.AreEqual(true, dataReader.GetBoolean(0)); Assert.AreEqual(1, dataReader.GetByte(1)); byte[] byteBuffer = new byte[2]; dataReader.GetBytes(2, 0, byteBuffer, 0, byteBuffer.Length); Assert.AreEqual(0x1, byteBuffer[0]); Assert.AreEqual(0x2, byteBuffer[1]); Assert.AreEqual('a', dataReader.GetChar(3)); char[] charBuffer = new char[2]; dataReader.GetChars(4, 0, charBuffer, 0, charBuffer.Length); Assert.AreEqual('a', charBuffer[0]); Assert.AreEqual('b', charBuffer[1]); Assert.IsNull(dataReader.GetData(0)); Assert.AreEqual(DateTime.Parse("1/1/2019"), dataReader.GetDateTime(5)); Assert.AreEqual(typeof(string).Name, dataReader.GetDataTypeName(0)); Assert.AreEqual(1.23m, dataReader.GetDecimal(6)); Assert.AreEqual(4.56d, dataReader.GetDouble(7)); Assert.AreEqual(typeof(string), dataReader.GetFieldType(0)); Assert.AreEqual(7.89f, dataReader.GetFloat(8)); Assert.AreEqual(Guid.Parse("eca0c8c6-9a2a-4e6c-8599-3561abda13f1"), dataReader.GetGuid(9)); Assert.AreEqual(1, dataReader.GetInt16(10)); Assert.AreEqual(2, dataReader.GetInt32(11)); Assert.AreEqual(3, dataReader.GetInt64(12)); Assert.AreEqual("Boolean", dataReader.GetName(0)); Assert.AreEqual(0, dataReader.GetOrdinal("Boolean")); Assert.AreEqual("true", dataReader.GetString(0)); Assert.AreEqual("true", dataReader.GetValue(0)); var objectBuffer = new object[14]; dataReader.GetValues(objectBuffer); Assert.AreEqual("true", objectBuffer[0]); Assert.AreEqual(DBNull.Value, objectBuffer[13]); Assert.IsTrue(dataReader.IsDBNull(13)); } }
protected override void BeginProcessing() { var csvHelperConfig = Configuration ?? new Configuration(); csvHelperConfig.IncludePrivateMembers = true; csvHelperConfig.MemberTypes = MemberTypes.Fields | MemberTypes.Properties; csvHelperConfig.AllowComments = AllowComments; csvHelperConfig.BufferSize = BufferSize; csvHelperConfig.Comment = CommentChar; csvHelperConfig.HasHeaderRecord = !NoHeaderRecord; csvHelperConfig.IgnoreBlankLines = !KeepBlankLines; csvHelperConfig.IgnoreQuotes = IgnoreQuote; csvHelperConfig.TrimOptions = TrimOption; var p = MyInvocation.BoundParameters; if (p.ContainsKey("Delimiter")) { csvHelperConfig.Delimiter = Delimiter; } if (p.ContainsKey("EscapeChar")) { csvHelperConfig.Escape = EscapeChar; } if (p.ContainsKey("QuoteChar")) { csvHelperConfig.Quote = QuoteChar; } _config = new Config() { CsvHelperConfiguration = csvHelperConfig, InitialCapacity = InitialCapacity, ColumnNames = ColumnNames, ColumnNameMap = ColumnNameMap, ColumnTypes = ColumnTypes, Strict = Strict, Culture = Culture }; if (AsDataTable) { // The current version does not support combination of -AsDataTable and input stream. if (string.IsNullOrEmpty(Path)) { WriteError(new ErrorRecord(new ArgumentException("-Path is required when -AsDataTable is set"), "", ErrorCategory.InvalidArgument, null)); return; } using (var reader = new StreamReader(Path, Encoding)) using (var csvReader = new CsvReader(reader, _config.CsvHelperConfiguration)) using (var csvDataReader = new CsvDataReader(csvReader)) { var dt = new DataTable(); if (ColumnTypes != null) { foreach (DictionaryEntry entry in ColumnTypes) { dt.Columns.Add((string)entry.Key, (Type)entry.Value); } } else { for (int i = 0; i < csvDataReader.FieldCount; i++) { dt.Columns.Add(csvDataReader.GetName(i), csvDataReader.GetFieldType(i)); } } if (ReadCount > 0) { int rowCount = 0; while (csvDataReader.Read()) { if (rowCount % ReadCount == 0) { WriteVerbose($"Starting batch of {ReadCount} ({rowCount} records processed)"); } string[] row = new String[csvDataReader.FieldCount]; csvDataReader.GetValues(row); dt.LoadDataRow(row, true); rowCount++; if (rowCount % ReadCount == 0) { WriteObject(dt.Copy()); dt.Clear(); } } // Write out remaining rows, if any. if (dt.Rows.Count > 0) { WriteObject(dt); } } else { dt.Load(csvDataReader); WriteObject(dt); } } return; } if (!string.IsNullOrEmpty(Path)) { using (var reader = new StreamReader(Path, Encoding)) using (var loader = new CsvLoader(reader, _config)) { LoadFile(loader); } return; } _output = new BlockingCollection <object>(); _completeEvent = new ManualResetEvent(false); _loader = new CsvLoader(null, _config); var thread = new Thread(() => { try { LoadFile(_loader); } catch (Exception e) { _exception = e; } finally { _completeEvent.Set(); } }); thread.Name = "Import-Csv2 loader thread"; thread.Start(); }