CsvParser не работает из-за пропущенных двойных кавычек

У меня есть сообщения в файле, как показано ниже, и я использую com.univocity.parsers.csv.CsvParser разбить строку на основе разделителя (в этом случае его -)

1-BC-"имя"-def-адрес

1-abc-"имя-DEF-адрес

Я создаю свой CsvParser объект как

private val settings = new CsvParserSettings()
settings.getFormat.setDelimiter('-')
settings.setIgnoreLeadingWhitespaces(true)
settings.setIgnoreTrailingWhitespaces(true)
settings.setReadInputOnSeparateThread(false)
settings.setNullValue("")
settings.setMaxCharsPerColumn(-1)
val parser = new CsvParser(settings)

и проанализировать входное сообщение как:

    for (line <- Source.fromFile("path\\test.txt").getLines) {
  println(parser.parseLine(line).toList)
}

и вывод:

List(1, bc, name, def, address)
List(1, abc, name-def-address)

Если вы видите вывод, вы можете видеть, что для 1-го сообщения строка была правильно разделена, но для второго сообщения она принимает все как значение после первой двойной кавычки. Кто-нибудь знает, почему такое поведение и как я могу получить желаемый результат? Я читаю каждое сообщение как строку, к которой следует просто трактовать кавычку / двойную кавычку как символ.

1 ответ

Решение

Автор этой библиотеки здесь. Когда цитата найдена после вашего - разделитель, парсер попытается найти заключительную цитату.

Самый простой способ обойти это - заставить парсер просто игнорировать кавычки с помощью:

settings.getFormat().setQuote('\0');

Надеюсь, поможет.

Другие вопросы по тегам