2012-09-17 34 views
5

我對於發揮框架,函數式編程和Iteratee I/O非常新穎,所以也許我的問題是非常的話題,甚至是愚蠢的。用一個枚舉器提供兩個迭代器

我想將大文本文件作爲流上傳到第三方,並同時提取有關此文件的元數據(基於其內容,以簡化說它是一個csv文件)。

我已經寫了兩個工作體解析器:Iteratee[Array[Byte], B]包含寫邏輯和Iteratee[Array[Byte], MetaData]包含元數據提取邏輯。你能告訴我如何將這兩個解析器結合起來,處理寫作,並在同一時間提取內容

回答

4

如果你有兩個iteratees,it1it1,比方說,你可以創建一個從他們「拉鍊」 iteratee(zippedIt在下面的代碼)將發送它接收到的任何輸入給兩個迭代,it1it2。請參閱Play Iteratee documentation of zip

下面是一個例子:

import play.api.libs.iteratee.{Enumerator, Iteratee, Enumeratee} 

val e = Enumerator("1", "2", "3") 
val it1 = Iteratee.foreach[String](v => println("1: " + v)) 
val it2 = Iteratee.foreach[String](v => println("2: " + v)) 
val zippedIt = Enumeratee.zip(it1, it2) 
e(zippedIt) 

這個小片段的控制檯輸出爲:

1: 1 
2: 1 
1: 2 
2: 2 
1: 3 
2: 3