diff --git a/src/main/java/com/univocity/parsers/csv/CsvParser.java b/src/main/java/com/univocity/parsers/csv/CsvParser.java index f82b6505..a7697fb7 100755 --- a/src/main/java/com/univocity/parsers/csv/CsvParser.java +++ b/src/main/java/com/univocity/parsers/csv/CsvParser.java @@ -525,7 +525,7 @@ protected final boolean consumeValueOnEOF() { } } } - boolean out = prev != '\0' && ch != delimiter && ch != newLine; + boolean out = prev != '\0' && ch != delimiter && ch != newLine && ch != comment; ch = prev = '\0'; if (match > 0) { saveMatchingCharacters(); diff --git a/src/test/java/com/univocity/parsers/issues/github/Github_305.java b/src/test/java/com/univocity/parsers/issues/github/Github_305.java index 3e0e5474..3210a1ba 100644 --- a/src/test/java/com/univocity/parsers/issues/github/Github_305.java +++ b/src/test/java/com/univocity/parsers/issues/github/Github_305.java @@ -1,8 +1,18 @@ -/* - * Copyright (c) 2019 Univocity Software Pty Ltd. All rights reserved. - * This file is subject to the terms and conditions defined in file - * 'LICENSE.txt', which is part of this source code package. - */ +/******************************************************************************* + * Copyright 2019 Univocity Software Pty Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ******************************************************************************/ package com.univocity.parsers.issues.github; diff --git a/src/test/java/com/univocity/parsers/issues/github/Github_306.java b/src/test/java/com/univocity/parsers/issues/github/Github_306.java new file mode 100644 index 00000000..efbf247d --- /dev/null +++ b/src/test/java/com/univocity/parsers/issues/github/Github_306.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright 2019 Univocity Software Pty Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ******************************************************************************/ +package com.univocity.parsers.issues.github; + + +import com.univocity.parsers.csv.*; +import org.testng.annotations.*; + +import java.io.*; +import java.util.*; + +import static org.testng.Assert.*; + +/** + * From: https://github.com/univocity/univocity-parsers/issues/306 + * + * @author Univocity Software Pty Ltd - dev@univocity.com + */ +public class Github_306 { + + @Test + public void testWithMultilineRecordsAndFooter() { + final String csv = "Timestamp,Value,Metric,Entity,host\n" + + "2019-01-21T11:39:53.763Z,160527072,jvm_memory_used,dev,\"LOCAL\n" + + "HOST\"\n" + + "2019-01-21T11:40:08.765Z,1.6270228E+8,jvm_memory_used,dev,\"LOCAL\n" + + "HOST\"\n" + + "#created at 2019-01-22T11:39:43.312Z"; + final CsvParserSettings settings = new CsvParserSettings(); + settings.setReadInputOnSeparateThread(false); + settings.setQuoteDetectionEnabled(true); + settings.setLineSeparatorDetectionEnabled(true); + settings.setHeaderExtractionEnabled(true); + settings.setDelimiterDetectionEnabled(true); + + final CsvParser csvParser = new CsvParser(settings); + csvParser.beginParsing(new StringReader(csv)); + + assertEquals(csvParser.getDetectedFormat().getDelimiterString(), ","); + + final List dataRows = csvParser.parseAll(new StringReader(csv)); + assertEquals(dataRows.size(), 2); + + for (String[] columns : csvParser.parseAll()) { + assertEquals(columns.length, 5); + } + + } + +}