2012-09-17 54 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