private static IEnumerable <string> Split(string line, CsvLayout splitLineParams, CsvBehaviour behaviour) { var splitter = new CsvStateMachine(new StringReader(line), splitLineParams, behaviour); var result = splitter.Lines(); return(result.First().Fields); }
public void EmptyString() { const string line = ""; var splitter = new CsvStateMachine(new StringReader(line), new CsvLayout(), new CsvBehaviour()); var result = splitter.Lines(); CollectionAssert.IsEmpty(result); }
public void Testing() { var input = "00, ,02\n,,"; var splitter = new CsvStateMachine(new StringReader(input), new CsvLayout(), new CsvBehaviour(TrimmingOptions: ValueTrimmingOptions.None)); var result = splitter.Lines().ToArray(); Assert.AreEqual(2, result.Count()); CollectionAssert.AreEqual(new[] { "00", " ", "02" }, result[0].Fields); }
public void SampleDataSplitTest() { var data = CsvReaderSampleData.SampleData1; var splitter = new CsvStateMachine(new StringReader(data), new CsvLayout(), new CsvBehaviour()); var result = splitter.Lines().ToArray(); CsvReaderSampleData.CheckSampleData1(false, 0, result[0].Fields); }
public void WhenInputContainsMultipleLinesWithTrailingEmptyField_ReturnsLinesWithEmptyField() { var input = "00,01, \n10,11, "; var splitter = new CsvStateMachine(new StringReader(input), new CsvLayout(), new CsvBehaviour()); var result = splitter.Lines().ToArray(); Assert.AreEqual(2, result.Count()); CollectionAssert.AreEqual(new[] { "00", "01", "" }, result[0].Fields); CollectionAssert.AreEqual(new[] { "10", "11", "" }, result[1].Fields); }
public void WhenSkipEmptyLinesIsFalse_ReturnsEmptyLines() { var input = "1\n\n2"; var splitter = new CsvStateMachine(new StringReader(input), new CsvLayout(), new CsvBehaviour(SkipEmptyLines: false)); var result = splitter.Lines().ToArray(); Assert.IsTrue(result[1].IsEmpty); }
public void WhenSkipEmptyLinesIsTrue_SkipsEmptyLines() { var input = "\r\n1\n\n2"; var splitter = new CsvStateMachine(new StringReader(input), new CsvLayout(), new CsvBehaviour(SkipEmptyLines: true)); var result = splitter.Lines().ToArray(); Assert.AreEqual("1", result[0].Fields[0]); Assert.AreEqual("2", result[1].Fields[0]); }
public CsvParser(TextReader textReader, CsvLayout layOut, CsvBehaviour behaviour) { _csvStateMachine = new CsvStateMachine(textReader, layOut, behaviour); _enumerator = _csvStateMachine.Lines().GetEnumerator(); _textReader = textReader; var firstLine = Lines().FirstOrDefault(); Header = (layOut, firstLine) switch { ({ HasHeaders : true }, firstLine : not null)
public void WhenSkipEmptyLinesIsFalse_AndEmptyLineIsAtTheEnd_ReturnsEmptyLine() { var input = "a,b\n "; var splitter = new CsvStateMachine(new StringReader(input), new CsvLayout(), new CsvBehaviour(SkipEmptyLines: false)); var result = splitter.Lines().ToArray(); Assert.AreEqual(2, result.Count()); CollectionAssert.AreEqual(new[] { "a", "b" }, result[0].Fields); Assert.IsTrue(result[1].IsEmpty); CollectionAssert.AreEqual(new[] { string.Empty, string.Empty }, result[1].Fields); }
public void WorksWithQuotedStringInsideQuotedField() { var data1 = @"""1"";"" 2 ""inside"" x "";3"; var csvLayout = new CsvLayout('\"', ';'); var splitter = new CsvStateMachine(new StringReader(data1), csvLayout, new CsvBehaviour()); var result = splitter.Lines().ToArray(); CollectionAssert.AreEqual(new[] { "1", @" 2 ""inside"" x ", "3" }, result[0].Fields); }
public void MultipleLinesAreSplitCorrectly() { var data1 = @"1;2;3 4;5;6"; var csvLayout = new CsvLayout('\"', ';'); var splitter = new CsvStateMachine(new StringReader(data1), csvLayout, new CsvBehaviour()); var result = splitter.Lines().ToArray(); CollectionAssert.AreEqual(new[] { "1", "2", "3" }, result[0].Fields); CollectionAssert.AreEqual(new[] { "4", "5", "6" }, result[1].Fields); }
public void WhenTrailingLineContainsMissingFields_MissingFieldActionIsReplaceByNull_LastLineIsAppendedWithNulls() { var input = "a,b,c,d,e" + "\na,b,c,d," + "\na,b,"; var splitter = new CsvStateMachine(new StringReader(input), new CsvLayout(), new CsvBehaviour(MissingFieldAction: MissingFieldAction.ReplaceByNull)); var result = splitter.Lines().ToArray(); Assert.AreEqual(3, result.Count()); CollectionAssert.AreEqual(new[] { "a", "b", "c", "d", "e" }, result[0].Fields); CollectionAssert.AreEqual(new[] { "a", "b", "c", "d", "" }, result[1].Fields); CollectionAssert.AreEqual(new[] { "a", "b", "", null, null }, result[2].Fields); }
public void QuotedFieldCanContainNewLineCharacters() { const string data = "\"\n\r\n\n\r\r\",,\t,\n"; var splitter = new CsvStateMachine(new StringReader(data), new CsvLayout(), new CsvBehaviour(), true); var csv = splitter.Lines().ToArray().Single().Fields.ToArray(); Assert.AreEqual(4, csv.Count()); Assert.AreEqual("\n\r\n\n\r\r", csv[0]); Assert.AreEqual("", csv[1]); Assert.AreEqual("", csv[2]); Assert.AreEqual("", csv[3]); }