Advertisement
Guest User

Untitled

a guest
Dec 8th, 2014
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.65 KB | None | 0 0
  1. import java.io.File
  2.  
  3. import akka.actor.ActorSystem
  4. import play.api.libs.iteratee._
  5.  
  6. import scala.concurrent.duration._
  7. import scala.concurrent.{ExecutionContext, Promise, Future}
  8. import java.util.Date
  9. import scala.concurrent.ExecutionContext.Implicits.global
  10.  
  11. object Main {
  12.  
  13.   def main(args: Array[String]) = {
  14.  
  15.     val system = ActorSystem("iteratee-system")
  16.  
  17.     val schudeler = Executors.newScheduledThreadPool(1)
  18.  
  19.     val hallOfFameCSV = getClass().getResourceAsStream("HallOfFame.csv")
  20.  
  21.     //Load file using Enumerator helper method to load files as Stream
  22.     val fileEnumerator: Enumerator[Byte] = {
  23.       println("Start loading data...")
  24.       Enumerator.fromStream(hallOfFameCSV).flatMap(x => Enumerator(x: _*))
  25.     }
  26.  
  27.     //Enumeratee que transformará nuestro iteratee de byte a char
  28.     val byteToCharEnumeratee:Enumeratee[Byte, Char] = Enumeratee.map[Byte]{ s => s.toChar }
  29.  
  30.  
  31.     def getByLine(data:Seq[Char] = IndexedSeq[Char](), line:List[String] = List[String]()):Iteratee[Char, List[String]] =
  32.       Cont{
  33.         case in @ Input.El(char) =>
  34.           if(char != '\r' && char != '\n'){
  35.             //println("Still processing...")
  36.             getByLine(data :+ char, line)
  37.           } else {
  38.             val lineString = data.mkString
  39.             getByLine(data = Seq.empty[Char], line :+ lineString.trim)
  40.           }
  41.         case in @ Input.EOF => Done(line, in)
  42.  
  43.         case in @ Input.Empty => Done(line, in)
  44.       }
  45.  
  46.     val iter = Iteratee.flatten(fileEnumerator |>> byteToCharEnumeratee &>> getByLine()).run
  47.  
  48.     iter.onSuccess {
  49.       case x => x.foreach(x => println(s"line -> $x"))
  50.     }
  51.  
  52.     println("")
  53.   }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement