CsvParser无法处理缺少双引号

时间:2019-02-28 17:19:36

标签: scala csv univocity

我在如下文件中有一条消息,并且我正在使用com.univocity.parsers.csv.CsvParser根据分隔符(在本例中为-)分割字符串

  

1-bc-“名称” -def-地址

     

1-abc-“名称定义地址

我创建

之类的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 个答案:

答案 0 :(得分:1)

此库的作者在这里。在您的-分隔符之后找到引号时,解析器将尝试查找结束引号。

最简单的方法是使解析器仅使用以下命令忽略引号:

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

希望有帮助。