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



我正在使用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(

这可能是很长的陈旧,但同样如此:如果我猜对了,你想在遇到 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],您可以非常轻松地映射它。

最新更新