private static MemoryStream BuildSampleUserCsv() { MemoryStream ms = new MemoryStream(); CsvWriter w = new CsvWriter(new SerializationContext(ms), new string[] { "ID", "Name", "Age", "Team" }); w.AppendRow(new object[] { 1, "Phil", 29, "VSPlat" }); w.AppendRow(new object[] { 2, "Scott", 32, "VSPlat" }); w.AppendRow(new object[] { 3, "Barry", 32, "VSPlat" }); return(ms); }
public void CsvWriter_Types() { using (SerializationContext context = new SerializationContext(new MemoryStream())) { using (CsvWriter writer = new CsvWriter(context, new string[] { "Value" })) { writer.AppendRow(new object[] { null }); writer.AppendRow(new object[] { true }); writer.AppendRow(new object[] { (byte)127 }); writer.AppendRow(new object[] { new DateTime(2013, 01, 01, 0, 0, 0, DateTimeKind.Utc) }); writer.AppendRow(new object[] { "String" }); writer.AppendRow(new object[] { (ByteBlock)"ByteBlock" }); writer.AppendRow(new object[] { new byte[] { 49, 50, 51 } }); writer.AppendRow(new object[] { Guid.Empty }); string expected = @"Value True 127 2013-01-01 00:00:00Z String ByteBlock 123 00000000-0000-0000-0000-000000000000 "; string actual = GetStreamContent(context); Verify.AreStringsEqual(expected, actual); } } }
public void CsvWriter_Types() { using (SerializationContext context = new SerializationContext(new MemoryStream())) { using (CsvWriter writer = new CsvWriter(context, new string[] { "Value" })) { writer.AppendRow(new object[] { null }); writer.AppendRow(new object[] { true }); writer.AppendRow(new object[] { (byte)127 }); writer.AppendRow(new object[] { new DateTime(2013, 01, 01, 0, 0, 0, DateTimeKind.Utc) }); writer.AppendRow(new object[] { "String" }); writer.AppendRow(new object[] { (ByteBlock)"ByteBlock" }); writer.AppendRow(new object[] { new byte[] { 49, 50, 51 } }); writer.AppendRow(new object[] { Guid.Empty }); string expected = @"Value" + Environment.NewLine + @"" + Environment.NewLine + @"True" + Environment.NewLine + @"127" + Environment.NewLine + @"2013-01-01 00:00:00Z" + Environment.NewLine + @"String" + Environment.NewLine + @"ByteBlock" + Environment.NewLine + @"123" + Environment.NewLine + @"00000000-0000-0000-0000-000000000000" + Environment.NewLine; string actual = GetStreamContent(context); Assert.AreEqual(expected, actual); } } }
public void CsvWriter_EveryByte() { using (SerializationContext context = new SerializationContext(new MemoryStream())) { using (CsvWriter writer = new CsvWriter(context, new string[] { "Value" })) { long valueStartPosition = context.Stream.Position; byte[] allValues = new byte[256]; for (int i = 0; i < allValues.Length; ++i) { allValues[i] = (byte)i; } writer.AppendRow(new object[] { allValues }); long valueEndPosition = context.Stream.Position; context.Stream.Seek(valueStartPosition, SeekOrigin.Begin); byte[] writtenBytes = context.Reader.ReadBytes((int)(valueEndPosition - valueStartPosition)); // Verify 261 bytes - 256 values, wrapping quotes, escaped quote, and CRLF terminator Assert.AreEqual(261, writtenBytes.Length); // Verify wrapping quotes Assert.AreEqual(UTF8.DoubleQuote, writtenBytes[0]); Assert.AreEqual(UTF8.DoubleQuote, writtenBytes[writtenBytes.Length - 3]); // Verify doubled quote Assert.AreEqual(UTF8.DoubleQuote, writtenBytes[1 + UTF8.DoubleQuote]); Assert.AreEqual(UTF8.DoubleQuote, writtenBytes[2 + UTF8.DoubleQuote]); } } }
public void CsvWriter_TooManyColumns() { using (SerializationContext context = new SerializationContext(new MemoryStream())) { using (CsvWriter writer = new CsvWriter(context, new string[] { "ID", "Changed Date", "Title" })) { Verify.Exception <InvalidOperationException>( () => writer.AppendRow(new object[] { 1520, new DateTime(2013, 12, 30, 0, 0, 0, DateTimeKind.Utc), true, Guid.NewGuid() }) ); } } }
public void CsvWriter_Basic() { using (SerializationContext context = new SerializationContext(new MemoryStream())) { using (CsvWriter writer = new CsvWriter(context, new string[] { "ID", "Changed Date", "Title" })) { writer.AppendRow(new object[] { 1519, new DateTime(2013, 12, 29, 0, 0, 0, DateTimeKind.Utc), "Value with no escaping." }); writer.AppendRow(new object[] { 1520, new DateTime(2013, 12, 30, 0, 0, 0, DateTimeKind.Utc), "Value with quote \"escaping\"." }); writer.AppendRow(new object[] { 1521, new DateTime(2013, 12, 31, 0, 0, 0, DateTimeKind.Utc), "Value, escaping required." }); writer.AppendRow(new object[] { 1522, new DateTime(2014, 01, 01, 0, 0, 0, DateTimeKind.Utc), "Value, escaping and \"quote wrapping\" required." }); writer.AppendRow(new object[] { 1523, new DateTime(2014, 01, 02, 0, 0, 0, DateTimeKind.Utc), "Value\r\nrequiring escaping." }); writer.AppendRow(new object[] { 1524, new DateTime(2014, 01, 03, 0, 0, 0, DateTimeKind.Utc), (ByteBlock)"ByteBlock Value" }); string expected = @"ID,Changed Date,Title 1519,2013-12-29 00:00:00Z,Value with no escaping. 1520,2013-12-30 00:00:00Z,""Value with quote """"escaping""""."" 1521,2013-12-31 00:00:00Z,""Value, escaping required."" 1522,2014-01-01 00:00:00Z,""Value, escaping and """"quote wrapping"""" required."" 1523,2014-01-02 00:00:00Z,""Value requiring escaping."" 1524,2014-01-03 00:00:00Z,ByteBlock Value "; string actual = GetStreamContent(context); Verify.AreStringsEqual(expected, actual); } // Verify CsvWriter.Dispose disposed the stream Assert.IsNull(context.Stream); } }
public void CsvWriter_AppendHeaderMismatch() { using (SerializationContext context = new SerializationContext(new MemoryStream())) { CsvWriter writer; // Write one row writer = new CsvWriter(context, new string[] { "ID", "Changed Date", "Title" }); writer.AppendRow(new object[] { 1520, new DateTime(2013, 12, 30, 0, 0, 0, DateTimeKind.Utc), "Value with no \"escaping\"." }); // Create another writer to append a second row (wrong header) Verify.Exception <IOException>( () => { writer = new CsvWriter(context, new string[] { "ID", "Changed Date", "Description" }); } ); } }
public void CsvWriter_AppendBadTerminator() { using (SerializationContext context = new SerializationContext(new MemoryStream())) { CsvWriter writer; // Write one row writer = new CsvWriter(context, new string[] { "ID", "Changed Date", "Title" }); writer.AppendRow(new object[] { 1520, new DateTime(2013, 12, 30), "Value with no \"escaping\"." }); // Write an incomplete second row [directly; CsvWriter now only flushes on row boundaries] context.Writer.Write("1251"); // Create another writer to append a second row (last row not terminated) Verify.Exception <IOException>( () => { writer = new CsvWriter(context, new string[] { "ID", "Changed Date", "Title" }); } ); } }
public void CsvWriter_Append() { using (SerializationContext context = new SerializationContext(new MemoryStream())) { CsvWriter writer; // Write one row writer = new CsvWriter(context, new string[] { "ID", "Changed Date", "Title" }); writer.AppendRow(new object[] { 1520, new DateTime(2013, 12, 30, 0, 0, 0, DateTimeKind.Utc), "Value with no escaping." }); // Create another writer to append a second row writer = new CsvWriter(context, new string[] { "ID", "Changed Date", "Title" }); writer.AppendRow(new object[] { 1521, new DateTime(2013, 12, 31, 0, 0, 0, DateTimeKind.Utc), "Value, escaping required." }); string expected = @"ID,Changed Date,Title" + Environment.NewLine + @"1520,2013-12-30 00:00:00Z,Value with no escaping." + Environment.NewLine + @"1521,2013-12-31 00:00:00Z,""Value, escaping required.""" + Environment.NewLine; string actual = GetStreamContent(context); Assert.AreEqual(expected, actual); } }
private const string USPSWebtoolUserID = "738STUDE3658"; // enter your USPS userID here public static void Main(string[] args) { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); Validator validator = new Validator(USPSWebtoolUserID, true); Address addr = new Address(); var file = "/Users/nideshchitrakar/Documents/CHE database/address verification/2017 PC Mail list/2017/Cohort 2017-Table 1.csv"; int totalScanned = 0; int totalErrors = 0; int totalActionReq = 0; // replace the following with directory to write the error and correct addresses files in // files will be created if no files already exists var errorFile = "/Users/nideshchitrakar/Documents/CHE database/address verification/2017 PC Mail list/2017/error-list.csv"; var correctFile = "/Users/nideshchitrakar/Documents/CHE database/address verification/2017 PC Mail list/2017/correct-list.csv"; var actionFile = "/Users/nideshchitrakar/Documents/CHE database/address verification/2017 PC Mail list/2017/action-list.csv"; CsvWriter errorWriter = new CsvWriter(errorFile); CsvWriter correctWriter = new CsvWriter(correctFile); CsvWriter actionWriter = new CsvWriter(actionFile); // open a file which is a CSV file with headers to read from using (CsvReader csv = new CsvReader(new StreamReader(file), true)) { int fieldCount = csv.FieldCount; //var errorHeaders = csv.GetFieldHeaders().ToList(); //errorHeaders.Add("Error"); //var correctHeaders = csv.GetFieldHeaders().ToList(); //correctHeaders.Add("Action Required"); //errorWriter.WriteHeader(errorHeaders); //correctWriter.WriteHeader(correctHeaders); var headers = new List <string> { "StudentID", "FirstName", "LastName", "Address1", "Address2", "City", "State", "ZipCode" }; var correctHeaders = new List <string>(); correctHeaders.AddRange(headers); correctHeaders.Add("FormattedAddress"); var errorHeaders = new List <string>(); errorHeaders.AddRange(headers); errorHeaders.Add("Error"); var actionHeaders = new List <string>(); actionHeaders.AddRange(headers); actionHeaders.Add("FormattedAddress"); actionHeaders.Add("Action Required"); correctWriter.WriteHeader(correctHeaders); errorWriter.WriteHeader(errorHeaders); actionWriter.WriteHeader(actionHeaders); while (csv.ReadNextRecord()) { totalScanned += 1; // the csv file must have headers Address, City, State, and ZipCode // else change the following to match the csv headers addr.Address1 = csv["Address2"]; addr.Address2 = csv["Address1"]; addr.City = csv["City"]; addr.State = csv["State"]; addr.Zip = csv["ZipCode"]; var result = validator.ValidateAddress(addr); if (result.ContainsKey("Error")) { totalErrors += 1; List <string> row = new List <string>(); //for (int i = 0; i < fieldCount; i++) for (int i = 0; i < headers.Count(); i++) { row.Add(csv[headers[i]]); } row.Add(result["Error"]); errorWriter.AppendRow(row); } else if (result.ContainsKey("Action Required")) { totalActionReq += 1; List <string> row = new List <string>(); //for (int i = 0; i < fieldCount; i++) for (int i = 0; i < headers.Count(); i++) { row.Add(csv[headers[i]]); } row.Add(result["Formatted Address"]); row.Add(result["Action Required"]); actionWriter.AppendRow(row); } else { List <string> row = new List <string>(); //for (int i = 0; i < fieldCount; i++) for (int i = 0; i < headers.Count(); i++) { row.Add(csv[headers[i]]); } row.Add(result["Formatted Address"]); //if (result.ContainsKey("Action Required")) //{ // totalActionReq += 1; // row.Add(result["Action Required"]); //} correctWriter.AppendRow(row); } } } stopWatch.Stop(); // get the elapsed time as a TimeSpan value TimeSpan ts = stopWatch.Elapsed; // format and display the TimeSpan value string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.WriteLine(); Console.WriteLine("Run Time: " + elapsedTime); Console.WriteLine("Total records scanned: " + totalScanned); Console.WriteLine("Total errors detected: " + totalErrors); Console.WriteLine("Total actions required: " + totalActionReq); }