Changelog History
-
v2.9.0 Changes
August 15, 2020๐ BUGs fixed
๐ CSV auto-detection assigning line ending as quote escape (#409)
๐ FixedWidthFields.keepPadding not working (#405)
๐ Multi-char delimiter incorrectly detected inside quoted string (#404)
๐ Fixed the repeatable conversions initialization in the DefaultConversionProcessor (#399)
๐ Fix NPE in EnumConversion (#391)
๐ fixed quoted parser when using non-printable char as delimiter (#378)
โจ Enhancements
๐ง make the maxRowSample for parameter public configurable for CSV auto-detection (#408)
๐ settings.excludeFields() doesn't throw errors for a non-existing fields anymore. (#383)
๐ฆ Expose InputAnalysisProcess implementations publicly (#381)
โ add "com.googlecode.openbeans" as an optional OSGi dependency (#411)
-
v2.8.4 Changes
December 09, 2019๐ BUGS FIXED:
๐ Value which contains line separator is NOT enclosed in quotes if line separator is 2 characters (#357)
๐ Headers in Record context are changed if parser instance is reused (#350)
๐ Record.getString(column) fails if type of column is declared as
int
and content in file isnull
(#355)โจ ENHANCEMENTS:
- ๐ Rows starting with comment char should be automatically quoted (#362)
-
v2.8.3 Changes
August 08, 2019๐ BUGS:
๐ #345 parseLine() is throwing ClassCastException when using lookahead
๐ #337 Inconsistent parsing behavior when max. characters per column is set to -1 (unlimited)
๐ #343 FixedWidthParser drops first char of next record if last field of current record is empty
๐ #336 Single column, empty row CSV files result in empty rows and truncation of the last row
๐ #328 Auto detect format with upper and lower thom is not working
๐ fixed issue writing rows with selection of fields where the number of columns is larger than the selected/available fields.
โจ ENHANCEMENTS:
On CSV format auto-detection, use order of allowed delimiters as order of preference
๐ Performance improvement parsing values when maxCharsPerColumn = -1 (i.e. unlimited)
โ added support for writing instances of Record directly.
-
v2.8.2 Changes
May 14, 2019๐ BUGS:
๐ Headers being extracted when not expected, and this is leading to memory leak #326
๐ Unclear iteractions between
iterate()
methods and context/header parsing #314๐ containsColumn throws ArrayIndexOutOfBoundsException, in combination with selectFields #316
๐ The result of the method
getRecordNumber
inTextParsingException
is wrong. #324โจ ENHANCEMENTS:
๐ On CSV format auto-detection, resolve space as column separator #310
โก๏ธ Updated default excel serialization settings to ALWAYS escape either
\r
or\n
as\r\n
. #315 -
v2.8.1 Changes
February 06, 2019๐ This release fixes bug reported in issue #309 - headers parsed from one input are used again when another input is parsed using the same parser instance.
-
v2.8.0 Changes
February 01, 2019โจ Enhancements:
- ๐ Map column name to attribute #287: This is a big change. Basically you can now skip annotations altogether and manually define mappings from parsed columns to an object, including nested attributes.
Now you can call
getColumnMapper()
from:- any
*Routines
class any
*Bean*Processor
class (includingBeanWriterProcessor
) for writingmapper.attributeToIndex("name", 0); //name goes to the first column mapper.attributeToColumnName("name", "client_name"); .// same thing, but the first column has header "client_name"
๐ Nested classes are also supported, you can do stuff such as the following, where
name
is buried in an object structure (assume a class Purchase with a Buyer attribute, which in turn has a Contact attribute, where the name is located:mapper.methodToIndex("buyer.contact.name", 0); // use methods too. This assumes Contact has a `fullName(java.lang.String)` setter method: mapper.methodToColumnName("buyer.contact.fullName", String.class, "client_name"); // this maps getter and setter methods named `fullName` to column `client_name`. The getters or setters are used depending if you are writing to a file or reading from it. mapper.methodToColumnName("buyer.contact.fullName", "client_name");
You can also just give it a map:
Map<String, Integer> mappings = new HashMap<String, Integer>(); ... fill your map mapper.attributesToIndexes(mappings);
โ Contrived unit tests: https://github.com/uniVocity/univocity-parsers/blob/master/src/test/java/com/univocity/parsers/issues/github/Github_287.java
Other enhancements:
๐ Support CSV delimiters of more than one character #209: instead of using one character, delimiters now can be anything (e.g:
##
,:-p
etc).๐ Support creation of immutable objects #280: create instances of java beans with private constructors and no setter methods.
โก๏ธ Enable case-sensitive column header matching #283: You can now target files with columns such as
'A'
, 'a'
,' A '
and' a '
. Any existing code should not be affected. For example: if you useparserSettings.selectFields("a")
and the parsed header is' A '
, then' A '
will be selected as usual. This update allows one to useparserSettings.selectFields(" A ", "a")
when headers such as' A '
and'a'
are present (you can go wild here and target many different columns namedaaa
with different number of surrounding spaces or different character case combinations).๐ CsvParser beginParsing closes the stream #303: Introduced flag to prevent the parser from automatically closing the input:
parserSettings.setAutoClosingEnabled(false)
โ Add option on FixedWidthParserSettings to keep padding of parsed values #276: the
@FixedWidth
annotation now has akeepPading
property. This can also be set on theFixedWidthFields
, using methodskeepPadingOn(columns)
andstripPaddingFrom(columns)
.Introduce
UnescapedQuoteHandling.BACK_TO_DELIMITER
#259: if an unescaped quote is detected, the parser will re-process the parsed value and split the unescaped value into individual values after each delimiter found.๐ Bugfixes:
๐ An extra row with null returned #306
๐ Cannot determine column separator #305
๐ Wrong line ending detection when normalizeLineEndingsWithinQuotes = false #299
๐ Column selection makes @Validate annotation misbehave #296
๐ Fixed width parsing with look-ahead and non-contiguous field definitions #294
๐
CsvParser.parse
ignoresheaders
parser setting inprocessStarted
Processor's method #289 -
v2.7.6 Changes
September 25, 2018โจ Enhancements:
- ๐ allowing users to subclass
ValidatedConversion
- ๐ better handling of InvocationTargetExceptions when dealing with errors thrown from getters/setters
๐ Bugfixes:
- custom validations weren't working when writing
- ๐ CSV autodetection failed in some cases (issue #272)
- ๐ allowing users to subclass
-
v2.7.5
August 06, 2018 -
v2.7.4
August 06, 2018 -
v2.7.3 Changes
August 02, 2018โจ Enhancements:
๐ Performance improvements skipping values of de-selected fields with the CSV parser.
โ Adding support for regex validation and custom validations on class attributes and methods annotated with
@Validate
๐ Bugfixes:
๐ CsvRoutines.getInputDimension() returns one row less rowCount regardless of csvParserSettings.setHeaderExtractionEnabled() #262
๐ record.toFieldMap() not working on FixedWidth #258