コード例 #1
0
        public void FixedWidthInputTest()
        {
            #region Setup

            FixedWidthColumnReader reader = new FixedWidthColumnReader();
            string filename = Path.Combine(InputDirectory, InputFile);
            reader.LoadFile(filename);

            var expectedStrings = new List<string[]>();
            var expectedObjects = new List<object[]>();
            var fields = new List<List<FixedWidthField>>();
            List<FixedWidthField> row;
            FixedWidthField temp, template;

            /***********************************************************************************
             * First row tests Seeker = FROM_START, Terminator = LENGTH, types int and float
             * Data = "this is some text25      13373.133712/20/18342:32 PM12 November 1978 15:38:24"
             ***********************************************************************************/
            expectedStrings.Add(new string[] {
                "this is some text25      ",
                "1337",
                "3.1337",
                "12/20/1834",
                "2:32 PM",
                "12 November 1978 15:38:24"
                });

            expectedObjects.Add(new object[] {
                "this is some text25      ",
                (int)1337,
                (float)3.1337,
                DateTime.Parse("12/20/1834"),
                DateTime.Parse("2:32 PM"),
                DateTime.Parse("12 November 1978 15:38:24")
                });

            row = new List<FixedWidthField>();
            template = temp = new FixedWidthField(0, 25, FixedWidthTypes.STRING, FixedWidthPositions.FROM_START, FixedWidthTerminators.LENGTH);
            row.Add(temp);

            temp = new FixedWidthField(template);
            temp.Start = 25;
            temp.End = 4;
            temp.Type = FixedWidthTypes.INT;
            row.Add(temp);

            temp = new FixedWidthField(template);
            temp.Start = 29;
            temp.End = 6;
            temp.Type = FixedWidthTypes.FLOAT;
            row.Add(temp);

            temp = new FixedWidthField(template);
            temp.Start = 35;
            temp.End = 10;
            temp.Type = FixedWidthTypes.DATETIME;
            row.Add(temp);

            temp = new FixedWidthField(template);
            temp.Start = 45;
            temp.End = 7;
            temp.Type = FixedWidthTypes.DATETIME;
            row.Add(temp);

            temp = new FixedWidthField(template);
            temp.Start = 52;
            temp.End = 25;
            temp.Type = FixedWidthTypes.DATETIME;
            row.Add(temp);

            fields.Add(row);
            row = new List<FixedWidthField>();

            /****************************************************************************************/

            /***********************************************************************************
             * Second row tests Seeker = FROM_CURRENT, otherwise same as first
             * Data = "this is some text25      13373.133712/20/18342:32 PM12 November 1978 15:38:24"
             **********************************************************************************/
            expectedStrings.Add(expectedStrings[0]);
            expectedObjects.Add(expectedObjects[0]);

            foreach (FixedWidthField f in fields[0])
            {
                temp = new FixedWidthField(f);
                temp.Seeker = FixedWidthPositions.FROM_CURRENT;
                temp.Start = 0;
                row.Add(temp);
            }

            fields.Add(row);
            row = new List<FixedWidthField>();

            /****************************************************************************************/

            /***********************************************************************************
             * Third row tests Seeker = FROM_START, Terminator = INDEX, types long and double
             * Data = "this is some text25      13373.133712/20/18342:32 PM12 November 1978 15:38:24"
             **********************************************************************************/
            expectedStrings.Add(expectedStrings[0]);

            expectedObjects.Add(new object[] {
                "this is some text25      ",
                (long)1337,
                (double)3.1337,
                DateTime.Parse("12/20/1834"),
                DateTime.Parse("2:32 PM"),
                DateTime.Parse("12 November 1978 15:38:24")
                });

            foreach (FixedWidthField f in fields[0])
            {
                temp = new FixedWidthField(f);
                temp.Terminator = FixedWidthTerminators.INDEX;

               //Used to be start index and length, converting to start index and end index
                temp.End = temp.Start + temp.End;
                if (temp.Type == FixedWidthTypes.FLOAT) temp.Type = FixedWidthTypes.DOUBLE;
                if (temp.Type == FixedWidthTypes.INT) temp.Type = FixedWidthTypes.LONG;
                row.Add(temp);
            }

            fields.Add(row);
            row = new List<FixedWidthField>();

            /****************************************************************************************/

            /***********************************************************************************
             * Fourth row tests Seeker = FROM_END, Terminator = NEWLINE, and overlapping records
             * Data = "0123456789"
             **********************************************************************************/

            expectedStrings.Add(new string[] { "34", "0123456789" });
            expectedObjects.Add(expectedStrings[expectedStrings.Count - 1] as object[]);

            row.Add(new FixedWidthField(7, 2, FixedWidthTypes.STRING, FixedWidthPositions.FROM_END, FixedWidthTerminators.LENGTH));
            row.Add(new FixedWidthField(0, 43847283, FixedWidthTypes.STRING, FixedWidthPositions.FROM_START, FixedWidthTerminators.NEWLINE));

            fields.Add(row);
            row = null;

            /****************************************************************************************/

            #endregion Setup

            Assert.AreEqual(expectedObjects.Count, expectedStrings.Count);
            Assert.AreEqual(expectedObjects.Count, fields.Count);

            //eString and eObject refer to the same object!
            var eObject = (reader as IEnumerable).GetEnumerator();
            var eString = eObject as IEnumerator<List<string>>;

            int count = expectedObjects.Count;

            for (int i = 0; i < count; i++)
            {
                if (!eString.MoveNext())
                {
                    Assert.Fail("Ran out of lines in input file {0}", InputFile);
                }
                reader.Columns = fields[i];
                List<string> myRowStrings = eString.Current;
                List<object> myRowObjects = eObject.Current as List<object>;

                //Make sure same number of elements for current row in myRowStrings, myRowObjects,
                //expectedObjects[i], expectedStrings[i], and fields[i]
                Assert.AreEqual(myRowStrings.Count, myRowObjects.Count);
                Assert.AreEqual(myRowObjects.Count, expectedObjects[i].Count());
                Assert.AreEqual(expectedObjects[i].Count(), expectedStrings[i].Count());
                Assert.AreEqual(expectedStrings[i].Count(), fields[i].Count());

                int fieldCount = myRowStrings.Count;
                for (int j = 0; j < fieldCount; j++)
                {
                    Assert.AreEqual(expectedObjects[i][j], myRowObjects[j]);
                    Assert.AreEqual(expectedStrings[i][j], myRowStrings[j]);
                }
            }
        }
コード例 #2
0
 /// <summary>
 /// Opens a geography file
 /// </summary>
 /// <param name="filename"></param>
 public GeographyFileReader(string filename)
 {
     this.HasFile = File.Exists(filename);
     _reader      = new FixedWidthColumnReader(filename, GeographyFileReader.Columns);
 }
コード例 #3
0
 /// <summary>
 /// Opens a geography file
 /// </summary>
 /// <param name="filename"></param>
 public GeographyFileReader(string filename)
 {
     this.HasFile = File.Exists(filename);
     _reader = new FixedWidthColumnReader(filename, GeographyFileReader.Columns);
 }
コード例 #4
0
        public void FixedWidthInputTest()
        {
            #region Setup

            FixedWidthColumnReader reader = new FixedWidthColumnReader();
            string filename = Path.Combine(InputDirectory, InputFile);
            reader.LoadFile(filename);

            var expectedStrings = new List <string[]>();
            var expectedObjects = new List <object[]>();
            var fields          = new List <List <FixedWidthField> >();
            List <FixedWidthField> row;
            FixedWidthField        temp, template;

            /***********************************************************************************
            * First row tests Seeker = FROM_START, Terminator = LENGTH, types int and float
            * Data = "this is some text25      13373.133712/20/18342:32 PM12 November 1978 15:38:24"
            ***********************************************************************************/
            expectedStrings.Add(new string[] {
                "this is some text25      ",
                "1337",
                "3.1337",
                "12/20/1834",
                "2:32 PM",
                "12 November 1978 15:38:24"
            });

            expectedObjects.Add(new object[] {
                "this is some text25      ",
                (int)1337,
                (float)3.1337,
                DateTime.Parse("12/20/1834"),
                DateTime.Parse("2:32 PM"),
                DateTime.Parse("12 November 1978 15:38:24")
            });

            row      = new List <FixedWidthField>();
            template = temp = new FixedWidthField(0, 25, FixedWidthTypes.STRING, FixedWidthPositions.FROM_START, FixedWidthTerminators.LENGTH);
            row.Add(temp);

            temp       = new FixedWidthField(template);
            temp.Start = 25;
            temp.End   = 4;
            temp.Type  = FixedWidthTypes.INT;
            row.Add(temp);

            temp       = new FixedWidthField(template);
            temp.Start = 29;
            temp.End   = 6;
            temp.Type  = FixedWidthTypes.FLOAT;
            row.Add(temp);

            temp       = new FixedWidthField(template);
            temp.Start = 35;
            temp.End   = 10;
            temp.Type  = FixedWidthTypes.DATETIME;
            row.Add(temp);

            temp       = new FixedWidthField(template);
            temp.Start = 45;
            temp.End   = 7;
            temp.Type  = FixedWidthTypes.DATETIME;
            row.Add(temp);

            temp       = new FixedWidthField(template);
            temp.Start = 52;
            temp.End   = 25;
            temp.Type  = FixedWidthTypes.DATETIME;
            row.Add(temp);

            fields.Add(row);
            row = new List <FixedWidthField>();

            /****************************************************************************************/


            /***********************************************************************************
             * Second row tests Seeker = FROM_CURRENT, otherwise same as first
             * Data = "this is some text25      13373.133712/20/18342:32 PM12 November 1978 15:38:24"
             **********************************************************************************/
            expectedStrings.Add(expectedStrings[0]);
            expectedObjects.Add(expectedObjects[0]);

            foreach (FixedWidthField f in fields[0])
            {
                temp        = new FixedWidthField(f);
                temp.Seeker = FixedWidthPositions.FROM_CURRENT;
                temp.Start  = 0;
                row.Add(temp);
            }

            fields.Add(row);
            row = new List <FixedWidthField>();

            /****************************************************************************************/


            /***********************************************************************************
             * Third row tests Seeker = FROM_START, Terminator = INDEX, types long and double
             * Data = "this is some text25      13373.133712/20/18342:32 PM12 November 1978 15:38:24"
             **********************************************************************************/
            expectedStrings.Add(expectedStrings[0]);

            expectedObjects.Add(new object[] {
                "this is some text25      ",
                (long)1337,
                (double)3.1337,
                DateTime.Parse("12/20/1834"),
                DateTime.Parse("2:32 PM"),
                DateTime.Parse("12 November 1978 15:38:24")
            });

            foreach (FixedWidthField f in fields[0])
            {
                temp            = new FixedWidthField(f);
                temp.Terminator = FixedWidthTerminators.INDEX;

                //Used to be start index and length, converting to start index and end index
                temp.End = temp.Start + temp.End;
                if (temp.Type == FixedWidthTypes.FLOAT)
                {
                    temp.Type = FixedWidthTypes.DOUBLE;
                }
                if (temp.Type == FixedWidthTypes.INT)
                {
                    temp.Type = FixedWidthTypes.LONG;
                }
                row.Add(temp);
            }

            fields.Add(row);
            row = new List <FixedWidthField>();

            /****************************************************************************************/


            /***********************************************************************************
             * Fourth row tests Seeker = FROM_END, Terminator = NEWLINE, and overlapping records
             * Data = "0123456789"
             **********************************************************************************/

            expectedStrings.Add(new string[] { "34", "0123456789" });
            expectedObjects.Add(expectedStrings[expectedStrings.Count - 1] as object[]);

            row.Add(new FixedWidthField(7, 2, FixedWidthTypes.STRING, FixedWidthPositions.FROM_END, FixedWidthTerminators.LENGTH));
            row.Add(new FixedWidthField(0, 43847283, FixedWidthTypes.STRING, FixedWidthPositions.FROM_START, FixedWidthTerminators.NEWLINE));

            fields.Add(row);
            row = null;

            /****************************************************************************************/

            #endregion Setup



            Assert.AreEqual(expectedObjects.Count, expectedStrings.Count);
            Assert.AreEqual(expectedObjects.Count, fields.Count);

            //eString and eObject refer to the same object!
            var eObject = (reader as IEnumerable).GetEnumerator();
            var eString = eObject as IEnumerator <List <string> >;

            int count = expectedObjects.Count;

            for (int i = 0; i < count; i++)
            {
                if (!eString.MoveNext())
                {
                    Assert.Fail("Ran out of lines in input file {0}", InputFile);
                }
                reader.Columns = fields[i];
                List <string> myRowStrings = eString.Current;
                List <object> myRowObjects = eObject.Current as List <object>;

                //Make sure same number of elements for current row in myRowStrings, myRowObjects,
                //expectedObjects[i], expectedStrings[i], and fields[i]
                Assert.AreEqual(myRowStrings.Count, myRowObjects.Count);
                Assert.AreEqual(myRowObjects.Count, expectedObjects[i].Count());
                Assert.AreEqual(expectedObjects[i].Count(), expectedStrings[i].Count());
                Assert.AreEqual(expectedStrings[i].Count(), fields[i].Count());

                int fieldCount = myRowStrings.Count;
                for (int j = 0; j < fieldCount; j++)
                {
                    Assert.AreEqual(expectedObjects[i][j], myRowObjects[j]);
                    Assert.AreEqual(expectedStrings[i][j], myRowStrings[j]);
                }
            }
        }