2012-09-17 34 views
5

Sono molto nuovo per giocare a framework, programmazione funzionale e I/O Iteratee, quindi forse la mia domanda è molto fuori tema o addirittura stupida.alimentazione di due iterate con un enumeratore

Vorrei caricare file di testo di grandi dimensioni come lo streaming di una terza parte e allo stesso tempo estrarre Meta Data su questo file (in base al suo contenuto, per semplificare detto che è un file CSV).

Ho già scritto due parser di lavoro: Iteratee[Array[Byte], B] che contiene la logica di scrittura e uno Iteratee[Array[Byte], MetaData] che contiene la logica di estrazione MetaData. La prego di dirmi come combinare questi due parser per gestire Scrittura e contenuti estraendo nel contempo

risposta

4

Se si dispone di due iteratees, it1 e it1, per esempio, è possibile creato un "zip" iteratee da loro (zippedIt in il codice seguente) che invierà qualsiasi input ricevuto per entrambe le iterazioni, it1 e it2. Vedi lo Play Iteratee documentation of zip.

Ecco un esempio:

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) 

L'uscita della console di questo piccolo frammento è:

1: 1 
2: 1 
1: 2 
2: 2 
1: 3 
2: 3 
Problemi correlati