2016-05-10 29 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)) 

}