CsvParser не работает из-за пропущенных двойных кавычек - PullRequest
0 голосов
/ 28 февраля 2019

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

1-bc- "name"-def-address

1-abc- "name-def-address

Я создаю свой 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 Ответ

0 голосов
/ 01 марта 2019

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

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

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

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

...