我正在尝试读取 CSV 并将其存储在类似矩阵的数组对象数组中。我遇到的一个障碍是字符串是用环绕的引号读入的——也就是说,字符串“price”不仅仅是单词价格,而是scala中的“”“”价格“”“”。因此,我想删除那些周围的引号。我还想确保任何数值都被强制转换为 Double/Int,因为它们是作为字符串读入的。
我现在拥有的:
val rawObs = io.Source.fromFile(file).getLines() .map(_.split(",")).toArray
// An example element of the array is:
//scala> rawObs(2)
//res93: Array[String] = Array("3", 0, "2013-02-27", 1, 52, 52, 1, "1", "kg")
// Here, I make a function to remove surrounding strings and return a string, or if there are
// not surrounding strings, return a Double.
def fixRawObs(x: String) = {
// if it was actually meant to be a string:
if(x.startsWith(""""""")){
// delete any " quotes
var y = x.replaceAll(""""""", "")
} else { // this means that x needs to be coerced to Int or Double
var y = x.toDouble
}
y // return y
}
// but this won't compile, it returns <console>:14: error: not found: value y
// If it did compile, I'd want to do something like this:
rawObs.map(_.map(fixRawObs(_)))
// (although, is there a better way?)
所以,基本上,我的第一个问题是如何修复我的 fixRawObs 函数,其次,这甚至是一种好的方法,还是有更好的方法来完成我想要的?我正在做的事情感觉有点骇人听闻。
我是 Scala 的超级新手,所以如果答案没有假设很多知识,我将不胜感激。谢谢!