2016-05-10 7 views
0

Wenn ich eine CSV wie die folgenden habe:Wie entferne ich Spalten aus einer CSV-Datei mit Scala

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

Aber ich wollte es so, während die Spaltenüberschrift als Argument nur machen, vorbei, in dieser Fall "Name":

Id,number 
1,023 
2,287 

Wie würde ich das in Scala tun?

+3

Haben Sie etwas versucht? Bitte teilen Sie einen Code und erklären Sie, wo genau Sie stecken geblieben sind. – plamut

Antwort

0

Es braucht ein bisschen Streit, aber Folgendes sollte es tun.

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

Versuchen Sie es.

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)) 

}