2016-06-30 33 views
0

我在一個名爲windData的變量中有一些數據,其中包含以下信息。將元組列表寫入Scala中的文件中

ListBuffer((2001-01-01T00:00:00.000+01:00,578,WIND projekt GmbH), 
(2001-01-01T01:00:00.000+01:00,420,WIND projekt GmbH),....) 

我需要將這些數據寫入csv文件。 代碼我已經寫

def printToFile(f: java.io.File)(op: java.io.PrintWriter => Unit) { 
    val p = new java.io.PrintWriter(f) 
    try { op(p) } finally { p.close() } 
    } 
printToFile(new File("/Users/krishna/Experiment/Internship/wind.csv")) { p => 
    windData.foreach(p.println) 
    } 

輸出

(2001-01-01T00:00:00.000+01:00,578,WIND projekt GmbH) 
(2001-01-01T01:00:00.000+01:00,420,WIND projekt GmbH) 

預期輸出:

2001-01-01T00:00:00.000+01:00,578,WIND projekt GmbH 
2001-01-01T01:00:00.000+01:00,420,WIND projekt GmbH 

如何我得到的線擺脫了元組的之前和之後。

回答

2

這將適用於任何長度的元組的列表 - 使用productIterator.mkString(",")連載將Tuple轉換爲字符串而不明確地訪問每個字段:

printToFile(new File("/tmp/wind.csv")) { p => 
    windData.foreach(tuple => p.println(tuple.productIterator.mkString(","))) 
} 
0

下面是一個例子:

scala> val d = ListBuffer((1,2,3),(4,5,6)) 
d: scala.collection.mutable.ListBuffer[(Int, Int, Int)] = ListBuffer((1,2,3), (4,5,6)) 

scala> d.foreach(x => print(x._1 + "," + x._2 + "," + x._3 + "\n")) 

結果:

1,2,3 
4,5,6 
+1

您還可以在'foreach'內部提供部分函數,​​以提高可讀性:'foreach {case(first,second)=> print ....' –

0

你可以做

windData.foreach { tuple => 
    println(tuple._1) 
    println(tuple._2) 
} 
+0

我仍然看到同樣的問題。 –

+0

由於您使用的是逗號運算符,因此這會返回一個元組。 –

+0

的確的,看我的編輯。 – Simon