用一个枚举器喂两个iteratee

时间:2012-09-17 10:18:32

标签: scala playframework iterate

我很擅长使用框架,函数式编程和Iteratee I / O,所以也许我的问题非常缺乏主题甚至是愚蠢的。

我想将大文本文件作为流上传到第三方,同时提取有关此文件的元数据(根据其内容,简化说它是一个csv文件)。

我已经编写了两个工作体解析器:Iteratee[Array[Byte], B]包含写入逻辑,Iteratee[Array[Byte], MetaData]包含MetaData提取逻辑。你能否告诉我如何将这两个解析器结合起来处理同时写入和提取内容

1 个答案:

答案 0 :(得分:4)

如果你有两个迭代,it1it1,你可以从它们创建一个“压缩”的迭代(下面的代码中为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