如何使用Kantan CSV解码到Scala案例类时验证CSV列计数

时间:2018-06-06 10:10:24

标签: scala csv parsing

我正在使用Kantan CSV库 - https://nrinaudo.github.io/kantan.csv/ - 将CSV解码为案例类的集合。代码片段如下:

case class Journey(origin: String, destination: String)
val file = ??? // read file
val xs: Either[ReadError, List[Journey]] = ReadResult.sequence(file.readCsv[List, Journey](rfc.withHeader))

问题是:如何强制执行严格的解析,以便CSV包含任何没有2个字段的行,将引发错误并返回错误(作为ReadError)

1 个答案:

答案 0 :(得分:0)

这可能已经很久了,但事实并非如此:如果我说对了,您想在遇到ReadError时抛出某种异常吗?这违反了函数式编程的目的,在函数式编程中,您不会从任何函数中引发异常,而是声明函数的返回类型中可能出错的地方-因此Either[ReadError, List[Journey]]

如果您不太在意错误本身,则可以将其“展平”为一系列选项,如下所示:

new File(filePath).readCsv[List, Journey](rfc.withHeader).map {
            case Left(_) => None
            case Right(value) => Option(value)
        }

但是我不确定这是否是您想要的,并且您在途中失去了信息。但是通过这种方式,您将拥有一个发生错误的None列表和一个其他情况下的Option[Journey]列表,可以很方便地映射它们。