Scala:解析csv行而不使用match / case

时间:2015-06-16 13:06:47

标签: scala

我们重复以下代码片段以从csv行获取数据:

              val rowSplit = line.split(",",-1)
              rowSplit match {
                case array:Array[String] =>{
                  if (array.length > 23){
                    val (office,messageid,screenchannel,screenname) = 
(array(0),array(2),array(3), array(8))
                    ...

但它只是臭。有一个更好的方法吗?

2 个答案:

答案 0 :(得分:1)

正确处理CSV文件并不容易。幸运的是,你可以使用一些库。我在这里使用了一个:http://super-csv.github.io/super-csv/index.html,非常好。

答案 1 :(得分:0)

首先,请注意,分隔符的简单拆分不是对常规CSV文件的正确解析,因为值可能会被引用并且可能包含逗号。

但是我们假设在您的情况下,逗号始终是分隔符,并且从不引用值。

在这种情况下,您可以使用正则表达式来解析CSV行。这是一个样本:

val LineRe = """([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),.*""".r
line match {
  case LineRe(office, _, messageId, screenChannel1, _, _, _, _, screenName) => ...