如果我有以下CSV格式:
Id,name,number
1,sam,023
2,ron,287
但是我想这样做只是将列标题作为参数传递,在这种情况下" name":
Id,number
1,023
2,287
我如何在Scala中执行此操作?
答案 0 :(得分: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
答案 1 :(得分: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))
}