コード例 #1
0
        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);
        }
コード例 #2
0
        public void EmptyString()
        {
            const string line     = "";
            var          splitter = new CsvStateMachine(new StringReader(line), new CsvLayout(), new CsvBehaviour());
            var          result   = splitter.Lines();

            CollectionAssert.IsEmpty(result);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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]);
        }
コード例 #8
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)
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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]);
        }