【问题标题】:Scala: parse a csv line without using match/caseScala:在不使用匹配/大小写的情况下解析 csv 行
【发布时间】:2023-03-26 15:32:01
【问题描述】:

我们重复以下代码 sn-p 从 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))
                    ...

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

【问题讨论】:

    标签: scala


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-03
        • 2017-10-28
        • 1970-01-01
        • 2014-05-18
        • 2018-05-27
        • 1970-01-01
        • 2012-08-01
        • 2013-12-07
        相关资源
        最近更新 更多