Exemple #1
0
        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);
        }
Exemple #2
0
        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);
                }
            }
        }
Exemple #4
0
        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]);
                }
            }
        }
Exemple #5
0
 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() })
                 );
         }
     }
 }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
        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" }); }
                    );
            }
        }
Exemple #8
0
        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);
        }