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]); } } }
/// <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); }
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]); } } }