Я пытаюсь использовать автоматическое определение формата 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 будет запятой ',', но фактическим разделителем является пробел ' '