2012-09-17 1 views
5

Je suis très nouveau à jouer cadre, programmation fonctionnelle et Iteratee I/O, alors peut-être ma question est très hors sujet ou même stupide. Je voudrais télécharger de gros fichiers texte en tant que flux vers un tiers et en même temps extraire des méta-données sur ce fichier (en fonction de son contenu, pour simplifier dit c'est un fichier csv).nourrir deux iteratee avec un énumérateur

J'ai déjà écrit deux analyseurs de corps de travail: Iteratee[Array[Byte], B] qui contient la logique d'écriture et un Iteratee[Array[Byte], MetaData] qui contient la logique d'extraction des métadonnées. Pourriez-vous s'il vous plaît me dire comment combiner ces deux parseurs pour gérer l'écriture et extraire le contenu dans le même temps

Répondre

4

Si vous avez deux iteratees, it1 et it1, par exemple, vous pouvez créer un « zip » iteratee d'eux (zippedIt en le code ci-dessous) qui enverra n'importe quelle entrée il reçoit à la fois iteratees, it1 et it2. Voir le Play Iteratee documentation of zip.

Voici un exemple:

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) 

La sortie de la console de ce petit extrait est:

1: 1 
2: 1 
1: 2 
2: 2 
1: 3 
2: 3 
Questions connexes