2016-05-10 31 views
0

一个CSV文件中删除列。如果我有一个CSV类似如下:我如何使用斯卡拉

Id,name,number 
1,sam,023 
2,ron,287 

但我想让它这样的,而只有通过列标题作为参数,在此case“name”:

Id,number 
1,023 
2,287 

我该如何在Scala中做这件事?

+3

你尝试过什么吗?请分享一些代码并解释你到底在哪里陷入困境。 – plamut

回答

0

它需要一些争论,但下面应该这样做。

scala> scala.io.Source.fromFile("data.csv").getLines.map(_.split(",")).map(s => s(0) + " " + s(2)).mkString("\n") 
res4: String = 
Id number 
1 023 
2 287 
0

试试吧。

object ColDrop extends App { 

    val Eol = "\n" 


    def dropCol(col: String, csv: String, delim: Char = ',') = { 

    def drop(line: Array[String], rmIndex: Int) = (line.take(rmIndex) ++ line.drop(rmIndex + 1)).mkString(delim.toString) 

    val csvArr = csv.split(Eol) 
    val header = csvArr.head.split(delim).map(_.trim) 
    val rmIndex = header.indexOf(col) 

    drop(header, rmIndex) + Eol + csvArr.tail.map { r => 
     drop(r.split(delim), rmIndex) 
    }.mkString(Eol) 
    } 

    println(dropCol("name", 
    """Id,name,number 
     |1,sam,023 
     |2,ron,287 
    """.stripMargin)) 

}