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');
Надеюсь, поможет.