0
一個CSV文件中刪除列。如果我有一個CSV類似如下:我如何使用斯卡拉
Id,name,number
1,sam,023
2,ron,287
但我想讓它這樣的,而只有通過列標題作爲參數,在此case「name」:
Id,number
1,023
2,287
我該如何在Scala中做這件事?
一個CSV文件中刪除列。如果我有一個CSV類似如下:我如何使用斯卡拉
Id,name,number
1,sam,023
2,ron,287
但我想讓它這樣的,而只有通過列標題作爲參數,在此case「name」:
Id,number
1,023
2,287
我該如何在Scala中做這件事?
它需要一些爭論,但下面應該這樣做。
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
試試吧。
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))
}
你嘗試過什麼嗎?請分享一些代碼並解釋你到底在哪裏陷入困境。 – plamut