Univocity - Как определить порядок предпочтения разделителя при автоматическом определении формата?

Я пытаюсь использовать автоматическое определение формата Univocity. для анализа этой таблицы CSV:

HEADER1, HEADER2, HEADER3
11, 12, 13
21, 22, 23
31, 32, 33

Как видите, такое же количество запятых ',' и пробелов ' '. Проблема в том, что эвристика для нахождения разделителя отдает предпочтение символу ' ' вместо ','.

Таким образом, в этом случае обнаруженным разделителем является пробел ' '. И тогда значения ячеек неверны, так как запятая берется как часть значения:

Я видел, что есть функция setDelimiterDetectionEnabled для определения разделителей в порядке приоритета, но я не смог заставить его работать.

Я использую это так: setDelimiterDetectionEnabled(true, ',', ' '), но все равно выбираю пробел в качестве разделителя.

Если я удаляю 1 пробел в таблице CSV (чтобы запятых было больше, чем пробелов), запятая выбирается в качестве разделителя.

Это код scala, но я думаю, что это не имеет значения, потому что библиотека написана на java:

val settings = new CsvParserSettings
settings.setDelimiterDetectionEnabled(true, ',', ' ')
val parser = new CsvParser(settings)
val spaceAndCommaTable = new File("/home/pr/SPACE_AND_COMMA.csv")
val parsed = parser.parseAll(spaceAndCommaTable, "UTF-8")
val format = parser.getDetectedFormat

Я ожидал, что format.getDelimiter будет запятой ',', но фактическим разделителем является пробел ' '


person Pablorotten    schedule 05.08.2019    source источник


Ответы (1)


Автор библиотеки здесь. Я только что исправил это и выпущу окончательную версию 2.8.3 завтра, чтобы включить корректировку, необходимую для того, чтобы это работало. Для тестирования уже можно использовать последнюю версию 2.8.3-SNAPSHOT.

Спасибо

person Jeronimo Backes    schedule 07.08.2019