我是刚开始玩框架,函数编程和Iteratee I/O的新手,所以也许我的问题太过分了,甚至太愚蠢了。
我想将大文本文件作为流上传到第三方,并同时提取有关此文件的元数据(基于其内容,为简化起见,它是一个csv文件)。
我已经编写了两个工作主体解析器:包含编写逻辑的Iteratee[Array[Byte], B]
和包含MetaData提取逻辑的Iteratee[Array[Byte], MetaData]
。您能否告诉我如何组合这两个解析器以同时处理内容和提取内容
最佳答案
例如,如果您有两个迭代器it1
和it1
,则可以从它们创建一个“压缩”迭代器(以下代码中的zippedIt
),它将接收到的所有输入发送给迭代器it1
和it2
。参见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
关于scala - 用一个枚举器给两个iteratee喂食,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12457239/