我正试图将scala中一个300多行长的csv文件处理成一个数组。
csv文件包含如下
20200522T0600,26.852346
20200522T0700,26.862345
20200522T0800,27.262346
20200522T0900,28.562346
20200522T1000,29.472345
20200522T1100,29.432346
这些是日期、时间和温度。我必须将(日期时间(和(温度(放入单独的平行数组中,稍后我应该计算平均温度,但我可以做到。我只是不知道如何将它们读入这两个数组。我知道我必须使用fromFile((和.getLines来获得这些行,但我被数组部分卡住了。
我试过这个
object Weather {
def main(args: Array[String]){
val source = Source.fromFile("Weather.csv")
var matrix :Array[String] = Array.empty
for(line <- source.getLines.drop(10)){
val cols = line.split(",").map(_.trim).toArray
matrix = :+ cols
println(matrix)
}
}
}
但是我得到这个结果
[error] matrix = :+ cols
[error] ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 0 s, completed Jul 9, 2020 6:26:56 AM
提前感谢
首先,split()
返回一个数组,因此不需要.toArray
。= :+
不是Scala,所以这不会让你走得很远。
试试这个。
val lines = io.Source
.fromFile("Weather.csv") //open file
.getLines //Iterator[String]
.drop(10) // ?
.map(_.split(",")) //Iterator[Array[String]]
如果需要将所有内容加载到内存中,请在末尾添加一个.toList
。
查看结果。
lines.foreach(println)
或者你可能不得不这样做。
lines.foreach(arr => println(arr.mkString("Array(", ",", ")")))