【发布时间】:2015-03-03 01:53:30
【问题描述】:
我想在 Scala 中读取一个 CSV 字符串/文件,这样给定一个案例类 C 和一个错误类型 Error,解析器填充一个 Iterable[Either[Error,C]]。是否有任何图书馆可以做到这一点或类似的事情?
例如,给定一个类和错误
case class Person(name: String, age: Int)
type Error = String
和 CSV 字符串
Foo,19
Ro
Bar,24
解析器会输出
Stream(Right(Person("Foo",1)), Left("Cannot read 'Ro'"), Right(Person("Bar", 24)))
更新:
我认为我的问题并不清楚,所以让我澄清一下:有没有办法在 Scala 中读取 CSV 而无需定义样板文件?给定 any 案例类,有没有办法自动加载它?我想以这种方式使用它:
val iter = csvParserFor[Person].parseLines(lines)
【问题讨论】:
-
不太可能有一个图书馆可以做到这一点(无论如何,要求图书馆推荐对于 SO 来说是题外话)。已经有任意数量的 CSV 阅读问题/答案(例如 stackoverflow.com/questions/17126365/…),那么您自己在哪里实施呢?
-
我刚刚删除了这里的内容,因为讨论有点偏离轨道,我们在下面得到了相关信息。我不是 100% 肯定这其中涉及到“粗鲁”,但我认为这是一个有争议的问题。谈话已经结束了。
-
我们可以假设 case 类只包含基本值类型(Int、Double)和字符串吗?如果不是,如何在 CSV 中编码更复杂的类型?如果您正在对 csv 进行更一般的序列化/反序列化,我建议您查看 scala-pickling 和 CSV 后端...
-
是的,我们假设case类只包含基本值
-
你能解释一下用例吗? CSV 文件是外部的,还是通过序列化案例类创建的?如果你只是序列化/反序列化,我建议像 scala-pickling